Académique Documents
Professionnel Documents
Culture Documents
Cours Oracle DBA
Cours Oracle DBA
ORACLE a été édité par la société Oracle Corporation, implantée aux USA à RedWood Shores en Californie.
Premier prototype 1977. Oracle version1 en 1979 premier SGBDR au monde.
Depuis, les produits ORACLE n’ont cessé d’évoluer avec l’évolution des technologies de l’information et de la
communication. Aujourd’hui ORACLE est un SGBD réparti, qui s’est tourné vers le Web.
Oracle est le leader des SGBD sur le marché mondial.
Objectif généraux :
Ce cours a pour but de vous apprendre à installer oracle, administrer une base de données, sa création, la
création des objets (Tables, séquences, indexes, …), la mise en place de la sécurité (gestion des utilisateurs),
la sauvegarde, restauration des données et la configuration de base de données pour une application.
.Chpt 1 : INSTALLATION D’ORACLE ET LES PRODUITS ORACLE
Enterprise Edition : inclut toutes les fonctionnalités d’Oracle Database, en standard ou en option, et
gère des données extrêmement volumineuses.
Standard Edition : inclut les fonctionnalités de base, mais ne permet pas d’exploiter certaines options
avancées. Cette édition est d’ailleurs destinée pour des serveurs avec une capacité maximale de
quatre processeurs.
Standard Edition One : pratiquement identique à l’édition standard mais limité à des serveurs
biprocesseurs.
Personal Edition : disponible uniquement sur Windows, destinée aux développeurs pour une
utilisation mono-utilisateur.
1
Express Edition : complètement gratuite, destinée pour des machines monoprocesseurs et
spécialement pour les petites entreprises, voire les institutions à but académique.
Lite Edition : inclut les fonctionnalités requises pour le développement et le déploiement
d’applications et de base de données mobiles.
Vous pouvez télécharger la base de données d'Oracle 10g de www.oracle.com. Vous devez
enregistrer et créer un compte avant que vous puissiez télécharger le logiciel.
Sous UNIX, l'installation d'Oracle Database ne peut se faire que par un utilisateur du groupe système
DBA. L'administrateur système "root" ne peut pas faire l'installation. Créez alors un groupe "DBA" et
un compte séparé appartenant à ce groupe "DBA" pour faire l'installation.
Sous Windows, l'installation doit se faire par un utilisateur du groupe administrateurs système. Ce
compte sera ajouté à un groupe système ORA_DBA créé automatiquement durant l'installation
d'Oracle Database.
Etape 1:
Décompresser le logiciel d'installation que vous avez téléchargé : "10201_database_win32.zip " dans
un dossier que vous choisissez ("c:\soft\oracle10g" par exemple)
Etape 2:
Lancer "C:\soft\oracle10g\database\setup.exe" pour démarrer "Oracle Universal Installer"
Dans l'écran qui suit :
2
Choisissez l'option "Installation de base" et laissez les valeurs choisies par défaut. Choisissez un mot de
passe de l'administrateur oracle (comptes System et Sys).
Si vous recevez une alerte de sécurité liée au Par-feu Windows, cliquez sur "Débloquer" pour autoriser les
composants java à s'exécuter.
Etape 4:
4
Laissez l'installateur progresser dans la configuration Oracle Net, base de données et iSQLPlus
A la fin de la création de la base de données et démarrage de l'instance oracle associée, l'écran suivant est
affiché:
Cliquez sur "OK" si vous ne souhaitez pas déverrouillez les comptes par défaut. Vous pouvez gérer plus tard
les comptes oracle via la console d'administration.
Sauvegarder le contenu de l’écran Assistant Configuration de Base de données pour d’éventuelle utilisation,
ou vous pouvez trouver ces informations dans le dossier oracle_home\install\readme.txt.
5
Cliquez sur suivant : et puis sur "Quitter" dans l'écran "Fin de l'Installation".
Ainsi, vos fichiers de configuration de base de données sont installés dans oracle_home exemple
"C:\oracle\product\10.2.0\db_n" (n entier).
6
• Mémoire SGA : partagée par tous les processus serveur et processus en arrière-plan.
• Mémoire PGA (Program Global Area) : propre à chaque serveur et processus en arrière-plan ; il
existe une mémoire PGA pour chaque processus.
La mémoire SGA est une zone de mémoire partagée contenant les données et les informations de contrôle de
l'instance.
• Cache de tampons (Database buffer cache) de la base de données : met en mémoire cache les
blocs de données récemment extraits de la base.
Généralement, augmenter la taille du Database Buffer Cache améliore les performances.
La taille du bloc (DB_BLOCK_SIZE) étant fixée à la création de la base, la taille du Database
Buffer Cache est définie par la valeur du paramètre DB_BLOCK_BUFFERS qui fixe le nombre de
buffers en mémoire, chaque buffer ayant une taille égale à DB_BLOCK_SIZE. Le paramètre
DB_BLOCK_BUFFERS est typiquement compris entre un millier (pour une petite base de test) et
plusieurs dizaines/centaines de milliers d’octets. Dimensionné par le paramètre
DB_CACHE_SIZE.
• Tampon de journalisation (Redo Log Buffer) : met en mémoire cache les informations de
journalisation (utilisées pour la récupération d'instance) jusqu'à ce qu'elles puissent être écrites
dans les fichiers de journalisation physiques stockés sur le disque. Dimensionné par le paramètre
LOG_BUFFER.
• Zone de mémoire partagée (Shared Pool Area) : met en mémoire cache diverses structures
pouvant être partagées par les utilisateurs (des ordres SQL récentes (Library Cache) et des
données du dictionnaire de données (Dictionary Cache). Elle est utilisée pour mémoriser,
analyser et traiter les ordres SQL soumis par les utilisateurs, elle peut réutiliser les ordres SQL
déjà exécutés. Elle est Dimensionnée par le paramètre SHARED_POOL_SIZE.
• Zone de mémoire LARGE POOL : zone facultative utilisée pour la mise en mémoire tampon des
demandes d'E/S volumineuses. Dimensionnée par le paramètre LARGE_POOL_SIZE.
• Zone de mémoire Java (Java Pool) : utilisée pour l'ensemble du code Java et des données
propres à la session, dans la JVM (Java Virtual Machine). Dimensionné par le paramètre
JAVA_POOL_SIZE.
• Zone de mémoire Streams (Stream Pool): utilisée par Oracle Streams. Dimensionné par le
paramètre STREAMS_POOL_SIZE.
Lorsque vous démarrez l'instance via Enterprise Manager ou SQL*Plus, la mémoire allouée pour la mémoire
SGA s'affiche.
La connexion
Le lien entre le processus utilisateur et le processus serveur est appelé une connexion.
7
Une connexion spécifique entre un utilisateur et un serveur Oracle est appelé une Session.
La session démarre lorsque la connexion de l'utilisateur est validée par le serveur Oracle et se termine
lorsqu'il se déconnecte ou lorsqu'une fin de connexion prématurée se produit.
De nombreuses sessions concurrentes d'un même utilisateur ou de plusieurs peuvent s'exécuter sur le
serveur Oracle.
L’interaction entre les clients et le serveur de base de données est assurée par le processus utilisateur du
côté client et par le processus serveur du côté du serveur. En effet, lorsqu’un utilisateur démarre une
application (SQL*Plus, Oracle Enterprise Manager, une application Developer Forms etc.), Oracle démarre un
processus utilisateur que ce soit sur sa machine distante s’il s’agit d’une architecture client-serveur ou sur un
serveur middle-tiers sur une architecture multi-tiers. Par la suite, une connexion entre le processus utilisateur
et l’instance est initiée et maintenue. Une fois la connexion établie, l’utilisateur ouvre une session en
s’identifiant (saisie de son nom d’utilisateur et de son mot de passe). Il est à noter que plusieurs sessions
peuvent être ouvertes en même temps, ces sessions peuvent être ouvertes par le même utilisateur ou
d’autres. Le paramètre qui détermine le nombre maximum de sessions ouvertes en même temps est
SESSIONS.
Après l’ouverture d’une session, Oracle démarre un processus serveur sur le serveur base de données, c’est
ce processus qui se chargera d’exécuter les requêtes de l’utilisateur et de maintenir une interaction entre le
client et le serveur.
Un serveur base de données est soit configuré en mode dédié, soit en mode partagé. Lorsque le serveur est
configuré en mode dédié, Oracle crée sur le serveur pour chaque utilisateur (et donc pour chaque processus
utilisateur) un processus serveur. En mode partagé, plusieurs processus utilisateurs peuvent partager un seul
et unique processus serveur. Le mode par défaut est le mode dédié, pour activer le mode partagé, il suffit de
modifier le paramètre SHARED_SERVERS dont la valeur par défaut est 0. La nouvelle valeur indiquerait le
nombre de processus serveurs partagés démarrés lorsque l’instance est lancée.
Rappelons qu’une zone de mémoire PGA est créée pour chaque processus serveur, elle inclut entre autres
les variables hôtes et les variables de session utilisées dans les requêtes/programmes
Syntaxe de la connexion classique
La connexion d’un utilisateur quelconque à une base de données oracle se fait en suivant la syntaxe :
SQLPLUS /nolog
8
SQL> Connect user_name/monpass@ service_OracleNet ( à la place de @service_OracleNet vous
pouvez positionner d’abord la variable d’environnement oracle_sid)
Exemple : set oracle_sid=nom_sid avant de taper SQLPLUS /nolog
Exemple : connexion de l’utilisateur System avec mot de passe Manager et Service Oracle Net « Orcl »
SQL> Connect SYSTEM/manager@Orcl
set ORACLE_SID=Nom_SID
Oracle_Home\bin\oradim -new -sid Nom_SID -startmode AUTO -pfile
"Emplacement_fichier_init\initsid.ora"
10
IV.2 Syntaxe de Modification d’une Instance
Set ORACLE_SID=Nom_SID
Oracle_Home\bin\oradim -Edit -sid Nom_SID -startmode AUTO -pfile
"Emplacement_fichier_init\initsid.ora"
11
Commande de démarrage de l’instance
$ >Sqlplus/nolog
Connect sys/motpasse@chaine_de_connexion
Startup open
12
Commande d’Arrêt de l’instance
$ >Sqlplus/nolog
Connect sys/motpasse@chaine_de_connexion
Shutdown immediate
13
Chp 2 : GESTION DE LA BASE DE DONNEES
STARTUP NOMOUNT
CREATE CONTROLFILE Reuse DATABASE "oratest" NoRESETLOGS NoARCHIVELOG
MAXLOGFILES 5
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 908
LOGFILE
GROUP 1 'D:\ORACLE\ORADATA\oratest\REDO01.LOG' SIZE 10M,
GROUP 1 'D:\ORACLE\ORADATA\oratest\REDO02.LOG' SIZE 10M,
GROUP 2 'D:\ORACLE\ORADATA\oratest\REDO03.LOG' SIZE 10M,
GROUP 2 'D:\ORACLE\ORADATA\oratest\REDO04.LOG' SIZE 10M
DATAFILE
'D:\ORACLE\ORADATA\oratest\SYSTEM01.DBF',
'D:\ORACLE\ORADATA\oratest\CWMLITE01.DBF',
'D:\ORACLE\ORADATA\oratest\DRSYS01.DBF',
'D:\ORACLE\ORADATA\oratest\INDEX\INDDEM.DBF',
'D:\ORACLE\ORADATA\oratest\INDEX\INDDIS.DBF',
CHARACTER SET WE8MSWIN1252
14
;
RECOVER DATABASE;
ALTER DATABASE OPEN;
b) Les fichiers Redo Log ou fichiers de journale des transactions, qui contiennent les enregistrements de
toutes les modifications effectuées sur le contenu de la base de données lors des transactions utilisateurs.
c) Les fichiers de données ou datafiles, ces derniers contiennent toutes les données de la base : les
structures logiques, telles que les tables, indexes, séquences, synonymes, vues et clusters qui sont
physiquement stockés dans les fichiers de données. Referez vous à la partie des tablespaces pour la
création de ces fichiers de données car ils sont liés aux tablespaces.
o Les Fichiers Redo Log
Les fichiers Redo Log contiennent les Redo Entries : structures d'information contenant la trace de toutes les
modifications du contenu de la base; ils sont utilisés pour la restauration des données. Les fichiers Redo Log
DOIVENT être multiplexés sur deux disques distincts afin de procurer une sécurité maximum en cas de
pannes disque. Les fichiers redo log sont remplis selon un mode circulaire. Il doit y avoir au moins deux
groupes de fichiers redo log pour qu'une instance accepte de démarrer. Dans la pratique on peut avoir
raisonnablement une quinzaine de groupe.
o Les fichiers Redo Log Multiplexés
Oracle recommande d'avoir au moins deux membres de redo log par groupe, chaque membre devant résider
sur un disque différents (si possible les disques devant être sur des contrôleurs SCSI différents).
Le multiplexage des redo log permet au DBA de survivre professionnellement à la perte d'un fichier Redo Log.
Tous les membres d'un groupe de fichiers Redo Log contiennent la même information et SONT de même
taille.
Les membres d'un même groupe sont mis à jours simultanément par LGWR.
Chaque groupe devrait contenir le même nombre de membres que les autres groupes.
LGWR écrit dans les fichiers Redo Log de manière séquentielle : lorsque le groupe courant est rempli, LGWR
écrit dans le groupe suivant. Lorsque le dernier groupe est rempli, LGWR recommence à écrire dans le
premier groupe et ainsi de suite... Chaque changement de groupe est appelle "SWITCH de Redo Log". Le
DBA a moyen de forcer un switch de Redo Log à l'aide de la commande suivante:
La commande suivante, lancée sous Server Manager (svrmgrl) permet de savoir si la base fonctionne en
mode ARCHIVELOG ou NOARCHIVELOG.
Svrmgrl> ARCHIVE LOG LIST
Un peu de pratique
Ajout de groupe de Redo Log :
Il peut être intéressant dans certains cas d'ajouter des groupes de Redo Log (en fonction de l'évolution d'une
base de production par exemple).
ALTER DATABASE ADD LOGFILE
('Unite\disk5\log31.rdo', 'unite\disk6\log32.rdo') SIZE 10M;
Remarquez que dans cet exemple, les deux membres du groupe sont sur des disques différents.
Ajout de membre de fichier Redo Log :
Dans le cas où une base de données n'aurait pas ses redo log multiplexés, il est impératif de rajouter au
moins un membre à chaque groupe pour garantir la sécurité de celle-ci par la commande suivante :
ALTER DATABASE ADD LOGFILE MEMBER
'disk6\log12.rdo' TO GROUP 1, '\disk6\log22.rdo' TO GROUP 2;
L'exemple ci-dessus ajoute un membre aux groupes 1 et 2; ceux-ci sont donc désormais multipléxés.
Déplacer des fichiers Redo Log :
Le déplacement de fichiers Redo Log se fait en plusieurs étapes :
1. Arrêter la base de données (shutdown immediate)
2. Déplacer (par des commandes OS) les fichiers au nouvel emplacement (cp, mv)
3. Monter la base de données (startup mount)
16
4. Exécuter la commande
ALTER DATABASE RENAME FILE '\disk6\log12.rdo' TO '\disk7\log12.rdo';
5. Ouvrez la base de données (alter database open)
Suppression de groupes de fichiers Redo Log
Pour augmenter (ou diminuer) la taille des membres d'un groupe, il faut créer un nouveau groupe dont les
membres sont plus volumineux puis supprimer un ancien groupe devenu trop petit.
ALTER DATABASE DROP LOGFILE GROUP 5 ;
Dans certains cas, il est impossible de supprimer un groupe de Redo Log :
- Il faut impérativement à Oracle au moins 2 groupes de Redo Log
- On ne peut pas supprimer le groupe de Redo Log courant
- Dans le cas d'une base en mode ARCHIVELOG, il est impossible de supprimer un groupe qui n'a pas été
archivé
Suppression de membres
Il est possible de supprimer un membre d'un groupe de fichiers Redo Log par la commande :
ALTER DATABASE DROP LOGFILE MEMBER '\disk6\log12.rdo' ;
Tout comme pour la suppression des groupes de Redo Log, il existe certains cas dans lesquels il est
impossible de supprimer un membre d'un groupe.
- Il est impossible de supprimer le dernier membre valide d'un groupe.
- Il est impossible de supprimer un membre du groupe courant; il faudra attendre ou forcer un switch de
Redo Log.
- Dans le cas d'une base en mode ARCHIVELOG, il est impossible de supprimer un membre d'un groupe
non archivé.
Autrefois créé avec l’utilitaire ORAPWD, il est aujourd’hui créé automatiquement lors de la création de la base
de données avec l’outil dbca. Mais pour des raisons de sécurité ou de corruption du fichier vous pouvez
toujours utiliser l’utilitaire ORAPWD pour le créer.
Ce fichier protège le compte SYS associé au privilège SYSDBA permettant une administration lourde
(création, démarrage, arrêt, restaurations).
orapwd file=<fichier> password=<mot de passe> [entries=<valeur>]
C: \orapwd file=$ORACLE_HOME/Database/pwd<SID>.ora password=dba entries=5
Pour octroyer le privilege SYSDBA à un utilisateur faite :
Grant SYSDBA to mon_user;
18
I. 3 Architecture Logique :
19
I.3.2 Gestion des Structures de Stockage
20
Actions sur les tablespaces
Le menu Actions vous permet d'effectuer différentes opérations sur les tablespaces. Sélectionnez un
tablespace, puis l'action que vous souhaitez effectuer :
• Add Datafile : ajoute un fichier de données au tablespace, ce qui a pour effet
d'augmenter la taille de ce dernier.
• Create Like : crée un tablespace en utilisant un autre tablespace comme
modèle.
• Generate DDL : génère l'instruction LDD qui crée le tablespace. Cette
instruction peut ensuite être copiée et collée dans un fichier texte afin d'être
utilisée en tant que script ou à des fins de documentation.
21
• Make Locally Managed : si le tablespace est actuellement géré au moyen du
dictionnaire de données, cette opération le convertit en tablespace géré
localement.
• Make Readonly : arrête toutes les écritures dans le tablespace. Les
transactions en cours peuvent se terminer, mais aucune nouvelle instruction
LMD ou autre activité d'écriture n'est autorisée à démarrer sur le tablespace.
• Make Writable : permet le lancement d'instructions LMD et d'autres activités
d'écriture sur les objets du tablespace.
Afficher les informations relatives aux tablespaces
Cliquez sur View pour afficher les informations relatives au tablespace sélectionné. Dans la page View
Tablespace, vous pouvez également cliquer sur Edit afin de modifier le tablespace.
Les informations relatives aux tablespaces et aux fichiers de données peuvent également être
obtenues via l'interrogation des vues suivantes :
• Informations relatives aux tablespaces :
- DBA_TABLESPACES
- V$TABLESPACE
• Informations relatives aux fichiers de données :
- DBA_DATA_FILES
- V$DATAFILE
• Informations relatives aux fichiers temporaires :
- DBA_TEMP_FILES
- V$TEMPFILE
Création du TableSpace Permanent
DEFAULT STORAGE : paramètres de stockage par défaut qui sera appliqué à tous les objets crées dans ce
tablespace
22
MINIMUM EXTENT : permet de s’assurer que chaque taille d’extent utilisée dans le tablespace est un multiple
de l’entier. Cette option est uniquement disponible à partir de la version 8
D'autres options peuvent être ajoutées à cette commande :
ONLINE : spécifie la mise online (disponible aux utilisateurs) du tablespace. C'est la valeur par défaut.
OFFLINE : spécifie la mise offline (non disponible aux utilisateurs) du tablespace
PERMANENT : Indique que le tablespace sera utilisé pour contenir des objets permanents (données, index).
C'est la valeur par défaut.
TEMPORARY : Indique que le tablespace ne contiendra que des objets temporaires. Cette option est utilisée
lorsque l'on crée un tablespace qui contiendra les segments de tri.
√ Paramètres de stockage
Les paramètres de stockage servent à contrôler l'allocation d'espace pour un segment. Ces paramètres sont
initialisés à la création du segment. Si aucun paramètre de stockage n'est indiqué lors de la création d'un
segment (dans les commandes CREATE TABLE, CREATE INDEX...), ce sont les paramètres de stockage par
défaut de la tablespace qui sont appliqués à ce segment.
Les paramètres de stockage sont les suivants :
- INITIAL : taille du premier extent. La taille minimum de l'initial est de 2*DB_BLOCK_SIZE (taille de 2 blocs
Oracle); la valeur par défaut est 5 blocs Oracle.
- NEXT : taille de l'extent qui suit l'initial.
- MINEXTENTS : nombre d'extents pré-alloués lors de la création du segment. La valeur minimum est de 1;
en effet, un segment contient au moins un extent : l'INITIAL.
- PCTINCREASE : pourcentage d'augmentation de la taille d'un extent en fonction de l'extent précédent.
ex : si un extent fait 100K et que le PCTINCREASE est 50%, la taille de l'extent suivant sera 150K
- MAXEXTENTS : nombre maximum d'extent d'un segment. Il est possible de spécifier UNLIMITED qui
permet de ne pas fixer de limite au nombre d'extents d'un segment.
Exemple :
Données d'annulation
Les données d'annulation sont également utilisées pour la récupération suite à l'échec de
transactions. Une transaction échoue lorsqu'une session utilisateur se termine de façon anormale (par
exemple suite à des erreurs réseau ou à la défaillance de l'ordinateur client), avant que l'utilisateur
n'ait décidé de valider (commit) ou d'annuler la transaction. Les transactions peuvent également
échouer suite à une défaillance de l'instance. En cas d'échec d'une transaction, le comportement le
plus sûr est choisi et Oracle annule toutes les modifications apportées par un utilisateur, en
rétablissant les données d'origine.
Des informations d'annulation sont conservées pour toutes les transactions, au moins jusqu'à la fin de
la transaction, qui a lieu lorsque l'un des événements suivants se produit :
Les informations d'annulation peuvent être conservées plus longtemps, selon l'activité et la
configuration de la base de données.
Oracle Database 10g recommande l'utilisation de la gestion automatique des annulations, via l'affectation de
la valeur AUTO au paramètre d'initialisation UNDO_MANAGEMENT. La gestion manuelle des annulations est
prise en charge pour des raisons de compatibilité descendante avec Oracle8i et les versions antérieures, mais
nécessite beaucoup plus d'interventions
du DBA.
Avec la gestion automatique des annulations, le DBA gère les informations d'annulation au niveau tablespace,
en contrôlant via le paramètre d'initialisation UNDO_TABLESPACE le tablespace d'annulation utilisé par une
instance. Après la sélection du tablespace d'annulation, l'administrateur doit simplement faire en sorte que
l'espace soit suffisant et qu'une période de conservation des informations d'annulation soit configurée.
25
Avec la gestion manuelle, le DBA doit également :
• Créer suffisamment de segments d'annulation pour gérer les transactions (en mode manuel, les
segments d'annulation sont également appelés "rollback segments")
• Choisir un tablespace pour le stockage des segments d'annulation (les tablespaces d'annulation
ne sont utilisés qu'avec la gestion automatique des annulations)
Undo_management=auto
Undo_tablespace=undotbs1
Retention Guarenttee
La période de conservation des informations d'annulation peut être configurée via le paramètre d'initialisation
UNDO_RETENTION. Ce paramètre définit la période au-delà de laquelle les informations d'annulation
expirent et peuvent être remplacées si nécessaire.
26
Avec la gestion automatique, les informations d'annulation sont si possible conservées jusqu'à leur expiration,
mais si une transaction active a besoin d'espace dans le tablespace d'annulation, les informations validées
(non expirées) sont remplacées, quelle que soit la période de conservation définie, afin d'éviter l'échec de la
transaction.
Une période de conservation de 0 active le réglage (tuning) automatique de la période de conservation des
informations d'annulation. Dans ce mode, l'instance conserve autant d'informations d'annulation que
nécessaire pour satisfaire l'interrogation la plus longue.
Le comportement par défaut consiste à remplacer les informations d'annulation des transactions validées et
qui n'ont pas encore expiré, dès lors qu'il s'agit d'éviter l'échec d'une transaction en raison d'un manque
d'espace.
Ce comportement peut toutefois être modifié via la garantie de la période de conservation. Lorsque la période
de conservation des informations d'annulation est garantie, les paramètres de conservation sont appliqués
même si cela entraîne l'échec d'une transaction.
RETENTION GUARANTEE est un attribut de tablespace et non un paramètre d'initialisation. Cet attribut peut
être modifié uniquement avec des instructions SQL de ligne de commande. La syntaxe permettant de modifier
un tablespace d'annulation afin de garantir la période de conservation des informations d'annulation est
illustrée dans la diapositive ci-dessus. Pour rétablir le comportement par défaut, utilisez la commande
suivante :
ERROR at line 1:
set ORACLE_SID=BASE
Oracle_home\bin\oradim.exe -new -sid BASE -startmode manual -spfile
Oracle_home\db_1\bin\oradim.exe -edit -sid BASE -startmode auto -srvcstart system
Création de la base
Oracle_home\bin\sqlplus/nolog
Connect sys/mot_pas as sysdba
Startup nomount
Set Echo On
27
Spool 'c:\oracle\the_path\the_echo\echo_create.txt'
CREATE DATABASE Base
USER SYS IDENTIFIED BY password
USER SYSTEM IDENTIFIED BY y1tz5p
LOGFILE GROUP 1 ('/u01/oracle/oradata/mynewdb/redo01.log') SIZE 100M,
GROUP 2 ('/u01/oracle/oradata/mynewdb/redo02.log') SIZE 100M,
GROUP 3 ('/u01/oracle/oradata/mynewdb/redo03.log') SIZE 100M
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
MAXINSTANCES 1
CHARACTER SET US7ASCII
NATIONAL CHARACTER SET AL16UTF16
DATAFILE '/u01/oracle/oradata/mynewdb/system01.dbf' SIZE 325M REUSE
EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE '/u01/oracle/oradata/mynewdb/sysaux01.dbf' SIZE 325M REUSE
DEFAULT TABLESPACE tbs_1
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/oracle/oradata/mynewdb/temp01.dbf'
SIZE 20M REUSE
UNDO TABLESPACE undotbs
DATAFILE '/u01/oracle/oradata/mynewdb/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
28
Chp 3 : Présentation des Outils de Gestion
Il permet de gérer la base de données : Exécution des tâches administratives, gestion de manière
graphique des objets
29
30
31
Cet outil permet d’exécuter des requêtes SQL et PLSQL
32
Assistant Configuration Oracle net :
33
Cet outil permet de créer le processus d’écoute( Listener) ,un nom de service Réseau (dans le tnsname),
d’inscrire la base dans le listener.
Dérouler l’arborescence Local jusqu’à se mettre sur le listener et dans le menu à droit
emplacements d’écoute, choisir Services de Base de Données et cliquer sur le bouton
34
ajouter une base de données qui est en bas, dans nom global entrer le nom de la base,
entrer le répertoire d’origine d Oracle Home et enfin introduit le nom d’instance.
Toute fois Pour inscrire une nouvelle base de données sans option graphique
Ouvrer le Listener dans le répertoire : Oracle_home\network\admin, en ajoutant les lignes :
(SID_DESC =
(GLOBAL_DBNAME = ESSAI)
(SID_NAME = ESSAI)
)
35
I. Gérer les utilisateurs graphiquement
Profils et utilisateurs
Les profils imposent un ensemble nommé de limites concernant l'utilisation de la base de données et les
ressources des instances. Les profils imposent également des limitations concernant les mots de passe des
36
utilisateurs (longueur, période d'expiration, etc.). Chaque utilisateur est affecté à un profil et ne peut appartenir
qu'à un seul profil à la fois.
Le profil par défaut sert de base pour tous les autres profils. Comme vous pouvez le voir dans la diapositive ci-
dessus, les limitations concernant un profil peuvent être définies implicitement (CPU/Session), être illimitées
(CPU/Call) ou faire référence à des paramètres du profil par défaut (Connect Time).
Les profils ne peuvent imposer des limitations de ressources aux utilisateurs que si la valeur TRUE est
affectée au paramètre RESOURCE_LIMIT. Avec la valeur par défaut (FALSE) de RESOURCE_LIMIT, les
limitations des profils sont ignorées.
• CPU. Les ressources CPU peuvent être limitées par session ou par appel. Une limite
CPU/Session de 1000 signifie que si une session individuelle qui utilise ce profil
consomme plus de 10 secondes de temps CPU (les limitations du temps CPU étant
exprimées en centièmes de seconde), cette session reçoit une erreur et est
déconnectée :
ORA-02392: exceeded session limit on CPU usage, you are being logged off
L'authentification consiste à vérifier l'identité d'une entité (utilisateur, périphérique ou autre) qui souhaite
utiliser les données, les ressources ou les applications. La validation de cette identité établit une relation de
confiance pour les interactions ultérieures. L'authentification permet également la responsabilisation, car il est
possible de lier l'accès et les actions à des identités spécifiques. Après l'authentification, le processus
d'autorisation peut autoriser l'accès et les actions par cette entité, ou les limiter.
Lorsque vous créez un utilisateur, vous devez décider de la technique d'authentification à utiliser, laquelle
pourra être modifiée ultérieurement.
37
Password : ce mode, également appelé authentification par la base de données Oracle, crée chaque
utilisateur avec un mot de passe associé qui doit être fourni lorsque l'utilisateur tente d'établir une connexion.
Lorsque vous définissez un mot de passe, vous pouvez le configurer afin qu'il expire immédiatement, ce qui
oblige l'utilisateur à le changer lors de la première connexion. Dans ce cas, assurez-vous que les utilisateurs
ont la possibilité de changer le mot de passe. Certaines applications n'offrent pas cette possibilité.
Privilèges
Un privilège est le droit d'exécuter un type particulier d'instruction SQL ou d'accéder à un objet d'un autre
utilisateur. Oracle autorise le contrôle très fin de ce que les utilisateurs peuvent ou ne peuvent pas faire dans
la base de données. Les privilèges sont répartis en deux catégories :
• Privilèges objet. Les privilèges objet permettent à un utilisateur d'effectuer une action
particulière sur un objet spécifique, tel qu'une table, une vue, une séquence, une
procédure, une fonction ou un package. Sans permission spécifique, les utilisateurs
ne peuvent accéder qu'à leurs propres objets. Les privilèges objet peuvent être
38
accordés par le propriétaire d'un objet, par l'administrateur ou par quelqu'un à qui la
permission d'accorder des privilèges sur l'objet a été accordée explicitement.
39
Rôles
Dans la plupart des systèmes, il est trop fastidieux d'accorder de manière individuelle les privilèges
nécessaires à chaque utilisateur et le risque d'erreur est trop important. Oracle permet la gestion facile et
contrôlée des privilèges par l'intermédiaire de rôles. Les rôles sont des groupes nommés de privilèges liés qui
sont accordés aux utilisateurs ou à d'autres rôles. Ils sont conçus pour faciliter l'administration des privilèges
dans la base de données, et donc améliorer la sécurité.
• Les privilèges sont accordés aux rôles (et révoqués) comme si le rôle était un
utilisateur.
• Les rôles peuvent être accordés aux utilisateurs ou à d'autres rôles (et révoqués)
comme s'il s'agissait de privilèges système.
40
• Un rôle peut être constitué de privilèges système et objet.
• Un rôle peut être activé ou désactivé pour chaque utilisateur auquel le rôle est
accordé.
Un schéma est un ensemble d'objets de base de données appartenant à un utilisateur particulier. Un schéma
porte le même nom que l'utilisateur auquel il appartient. Les objets de schéma sont les structures logiques qui
font directement référence aux données de la base. Les objets de schéma incluent des structures telles que
des tables, des vues et des index.
Remarque : Il n'existe pas de relation entre un tablespace et un schéma. Les objets du même schéma
peuvent résider dans différents tablespaces et un tablespace peut contenir des objets de différents schémas.
Vous pouvez créer et manipuler les objets de schéma à l'aide de code SQL ou de l'application Enterprise
Manager. Lorsque vous utilisez Enterprise Manager, le code SQL sous-jacent est généré pour vous.
41
Syntaxe complète de l'ordre CREATE USER
42
Modifier un Utilisateur
Il est possible de modifier un utilisateur à l'aide de la commande ALTER USER :
ALTER USER bob IDENTIFIED BY bob123;
Change le mot de passe de l'utilisateur bob.
La même commande permet d'expirer le mot de passe d'un utilisateur :
ALTER USER bob PASSWORD EXPIRE ;
On peut de la même façon modifier les quotas des utilisateurs :
ALTER USER bob QUOTA 0 ON DATA_02 ;
La valeur 0 (zéro) supprime tous les droits de l'utilisateur sur le tablespace spécifié derrière le mot-clé "ON".
Toutes les options disponibles dans la commande CREATE USER sont modifiables par la commande ALTER
USER.
Supprimer un Utilisateur
Voici la structure complète d'un ordre DROP USER :
Option Description
Ce paramètre permet de définir le nombre maximal de tentatives de connexion. Si
le nombre de connexion donné par le paramètre FAILED_LOGIN_ATTEMPTS est
FAILED_LOGIN_ATTEMPTS
atteint le compte sera alors verrouillé pendant une période donnée par le
paramètre PASSWORD_LOCK_TIME
Ce paramètre permet de définir la durée d'utilisation du même mot de passe. Ce
PASSWORD_LIFE_TIME
paramètre devra être défini en jours. Une fois la date limite d'utilisation, Oracle
43
demandera alors automatiquement à l'utilisateur de bien vouloir changer son mot
de passe.
Ce paramètre défini en nombre de jours, permet de définir le délai entre deux
utilisations du même mot de passe. Par exemple si celui ci vaut 30 et que votre
mot de passe actuel est toto. Il vous faudra attendre 30 jours à compter de la date
de votre changement de mot de passe avant de pouvoir à nouveau utiliser toto
PASSWORD_REUSE_TIME comme mot de passe.
Option Description
SESSIONS_PER_USER permet de définir le nombre de session maximum qu'un utilisateur pourra ouvrir.
permet de définir le temps de processeur maximum en centièmes de secondes
CPU_PER_SESSION
qu'une session pourra utiliser.
permet de définir le temps de processeur maximum en centièmes de secondes
CPU_PER_CALL
qu'un "appel serveur" (requête) pourra utiliser.
permet de définir le temps en minutes pour la durée de connexion maximale
CONNECT_TIME
d'une session. A la fin du temps imparti la session sera automatiquement
44
déconnectée.
permet de définir le temps en minutes pour la durée d'inactivité maximale d'une
IDLE_TIME session. A la fin du temps imparti la session sera automatiquement
déconnectée.
LOGICAL_READS_PER_SESSION permet de définir le nombre maximal de bloc lus durant une session.
LOGICAL_READS_PER_CALL permet de définir le nombre maximal de bloc lus durant un "appel serveur".
Permet de définir le coût total des limitations autorisées pour une session.
Oracle calcule le coût total de toutes les ressources à partir du poids attribué
COMPOSITE _LIMIT
aux paramètres CPU_PER_SESSION, CONNECT_TIME,
LOGICAL_READS_PER_SESSION, et PRIVATE_SGA.
PRIVATE_SGA permet de définir la taille en Kbytes ou MBytes que pourra utiliser une session.
NB : La valeur DEFAULT est une valeur particulière, lorsque vous assignerez la valeur DEFAULT à une limitation alors
Oracle ira récupérer la valeur de la limitation dans le profil DEFAULT.
45
ALTER PROFILE user LIMIT
SESSIONS_PER_USER 10
IDLE_TIME 15;
Toutes les options de la commande CREATE PROFILE sont modifiables par la commande ALTER PROFILE.
Suppression d'un Profil
Syntaxe :
Attention avec l'option ALL PRIVILEGES. Celle-ci accorde des droits quasi illimités à l'utilisateur qui en hérite,
avec les risques de sécurité que cela implique.
Pour que l'utilisateur puisse simplement se connecter à la base, il doit bénéficier du privilège système
CREATE SESSION
GRANT CREATE SESSION TO nom_utilisateur ;
Ensuite il faut lui assigner des droits de création de table
GRANT CREATE TABLE TO nom_utilisateur ;
46
Puis les droits de création de vues
GRANT CREATE VIEW TO nom_utilisateur ;
Et il en va de même pour tous les autres privilèges qui lui sont assignés.
L'ensemble de ces privilèges peuvent être assignés au sein d'une même commande
GRANT
CREATE SESSION
,CREATE TABLE
,CREATE VIEW
TO nom_utilisateur ;
47
GRANT
SELECT
,INSERT
,UPDATE
,DELETE
ON SCOTT.EMP
TO nom_utilisateur ;
Une liste de colonnes peut être indiquée dans l'instruction afin de restreindre davantage les droits sur une
table
GRANT
UPDATE (JOB, MGR)
ON SCOTT.EMP
TO nom_utilisateur ;
L'utilisateur peut modifier la table SCOTT.EMP mais uniquement les colonnes JOB et MGR
Pour pouvoir mettre à jour ou supprimer des lignes d'une table, les privilèges UPDATE ET DELETE ne
suffisent pas. Le privilège SELECT est nécessaire.
Un utilisateur munis des droits DBA ne pourra pas accorder de privilèges sur un objet qui ne lui appartient pas
Lorsque le rôle est créé, il ne contient rien et il faut l'alimenter à l'aide d'instructions GRANT
49
Retirer des privilèges système
Les privilèges système qui ont été assignés à des utilisateurs ou à des rôles peuvent être retirés avec
l'instruction REVOKE :
Syntaxe
50
I. Un schéma :
Un schéma est un ensemble d'objets de base de données appartenant à un utilisateur particulier. Un schéma
porte le même nom que l'utilisateur auquel il appartient. Les objets de schéma sont les structures logiques qui
font directement référence aux données de la base. Les objets de schéma incluent des structures telles que
des tables, des vues et des index.
Remarque : Il n'existe pas de relation entre un tablespace et un schéma. Les objets du même schéma
peuvent résider dans différents tablespaces et un tablespace peut contenir des objets de différents schémas.
Vous pouvez créer et manipuler les objets de schéma à l'aide de code SQL ou de l'application Enterprise
Manager. Lorsque vous utilisez Enterprise Manager, le code SQL sous-jacent est généré pour vous.
Vous pouvez accéder rapidement à de nombreux types d'objet de schéma à partir de la région Schéma de la
page Database Administration.
Lorsque vous créez une table, vous devez indiquer un type de données pour chacune de ses colonnes.
Lorsque vous créez une procédure ou une fonction, vous devez indiquer un type de données pour chacun de
ses arguments. Ces types de données définissent le domaine des valeurs que chaque colonne peut contenir
ou que chaque argument peut comporter.
• DATE : plage de dates valide, comprise entre le 1er janvier 4712 avant J.-C. et le
31 décembre 9999 après J.-C. ; ce type de données contient également l'heure, avec
une précision d'une seconde.
Reportez-vous au manuel Oracle Database SQL Reference pour la liste complète des types de données
intégrés et des types de données définis par l'utilisateur.
Une table peut comporter jusqu'à 254 colonnes et une seule de type LONG.
Le nombre de tables qu'il est possible de définir dans une base est de 65535.
Syntaxe.
CREATE TABLE nom_table (
nom_colonne1 type_donées [NOT NULL],
…
nom_colonneN type_donnes [ NOT NULL],
[Constraint nom_contratinte]
[Primary key (nom_colonneA, nom_colonneB,.., nom_colonneX)],
[Constraint nom_contratinte_FK Foreign key (nom_colonneF1, …, nom_colonneFN)
references table_reference (nom_colonneP1,…, colonnePN])
[TABLESPACE nom_tbs]
[ STORAGE ([INITIAL taille K | M] [NEXT taille K | M] [MINEXTENTS taille K | M] [MAXEXTENTS taille K | M]
[PCTINCREASE pct ] )] ;
EXEMPLE
52
comm NUMBER(7,2),
deptno NUMBER(3) NOT NULL
CONSTRAINT dept_fkey REFERENCES dept)
PCTFREE 10
PCTUSED 40
TABLESPACE users
STORAGE ( INITIAL 50K
NEXT 50K
MAXEXTENTS 10
PCTINCREASE 25 );
53
( empno NUMBER(6) NOT NULL, ename VARCHAR2(10),
job VARCHAR2(9), mgr NUMBER(6),
hiredate DATE,sal NUMBER(10,2) ,
comm NUMBER(9,0) , deptno NUMBER(2));
Remarques : L'option NOT NULL assure qu'Oracle interdira lors d'un INSERT ou d'UPDATE que cette
colonne contienne la valeur NULL qui est la valeur par défaut.
Création avec insertion de données.
On peut insérer des données dans la table lors de sa création, en utilisant la syntaxe suivante:
Les index sont des structures facultatives associées aux tables. Elles peuvent être créées afin d'améliorer les
performances de l'extraction des données. Un index Oracle fournit un chemin d'accès direct vers les données
des tables.
Les index peuvent être créés sur une ou plusieurs colonnes d'une table. Une fois un index créé, il est
automatiquement géré et utilisé par le serveur Oracle. Les mises à jour des données d'une table, telles que
l'ajout, la mise à jour ou la suppression de lignes, sont automatiquement propagées vers tous les index
appropriés, de manière totalement transparente pour l'utilisateur qui apporte la modification.
Vous pouvez cliquer sur le lien Indexes sous l'en-tête Schema de la page Administration afin d'afficher la page
Indexes. Vous pouvez afficher les attributs des index ou utiliser le menu Actions pour afficher les
dépendances (View Dependencies) d'un index.
Les index peuvent être créés explicitement, ou implicitement par l'intermédiaire de Contraintes placées sur
une table.
Création d'index.
55
Syntaxe.
Un index peut être créé sur une table contenant déjà des lignes. Il sera ensuite tenu à jour
automatiquement lors des modifications de tables.
Il est préférable de créer la table, de la renseigner puis de créer les index plutôt que de créer la table,
les index et de renseigner la table. Les index seront mieux équilibrés.
Exemples: create index ideptno on emp (deptno);
CREATE INDEX article_idx ON article
PCTFREE 10
STORAGE (INITIAL 64K NEXT 64K PCTINCREASE 50 MAXEXTENTS 500)
TABLESPACE IDX ;
Suppression d'un index.
Syntaxe.
Modification d’indexe
o Modifications des paramètres de stockage d'index
ALTER INDEX article_idx STORAGE (NEXT 200K MAXEXTENTS 200) ;
Il est aussi possible de modifier les paramètres de concurrence des index INITRANS et MAXTRANS.
o Allocation - Désallocation d'Extents
Avant une insertion importante de données, il peut être intéressant, comme pour les tables, de préallouer des
extents par la commande :
ALTER INDEX article_idx ALLOCATE EXTENT (SIZE 500K DATAFILE '/disk5/index_01.dbf') ;
On peut aussi désallouer les extents vides :
ALTER INDEX article_idx DEALLOCATE UNUSED;
o Reconstruction d'index
Il est possible de reconstruire des index avec la commande :
ALTER INDEX article_idx REBUILD TABLESPACE IDX_02 ;
Cette commande est utilisée lorsque :
- Un index doit être déplacé vers un autre tablespace
- Un index contient beaucoup d'entrées supprimées. Ce qui est le cas après certaines purges par
exemple.
56
- Un index B-tree peut être transformé en un index inversé et vice versa.
Une reconstruction d'index exécute les tâches suivantes :
- Lorsque l'on reconstruit un index, les utilisateurs peuvent continuer à l'utiliser car le nouvel index est
crée à part à partir du précédent index et celui-ci remplace le nouvel index une fois crée.
- Elle supprime physiquement les entrées d'index ce qui permet d'avoir des index bien plus efficaces.
Comme la reconstruction d'index se base sur un index déjà existant, il n'y a pas besoin de faire des tris.
Utilisation des index.
Les index peuvent être utilisé si:
La colonne indexée est référencée dans un prédicat.
Une fonction ou une expression n'altère pas cette colonne dans le prédicat.
Les index sont mis à jour automatiquement par Oracle lors des ordres LMD (INSERT, UPDATE et
DELETE).
Il faut indexer :
Les colonnes servant d'identifiant (index) unique (clé primaire).
Les colonnes de jointure avec une autre table (clé étrangère).
Les colonnes servant souvent de clé d'accès dans les prédicats.
Les vues sont des représentations personnalisées des données d'une ou plusieurs tables ou autres vues. Il
s'agit en quelque sorte d'interrogations stockées. Les vues ne contiennent pas de données à proprement
parler ; leurs données sont issues des tables sur lesquelles elles sont basées. Ces tables sont appelées tables
de base de la vue.
Données et contraintes.
Les données sont de type identique aux données des tables.
La clause WITH CHECK OPTION permet d'assurer la cohérence des informations modifiées.
Création de vues.
Syntaxe.
La spécification des noms de colonnes de la vue est facultative. Par défaut, les colonnes de la vue ont
pour nom, les noms des colonnes issus du SELECT.
Le SELECT servant à créer la vue ne peut pas contenir les clauses ORDER BY et CONNECT BY.
L'ordre SQL de création de la vue sera exécuté à chaque appel de la vue.
57
as select empno, ename,job
from emp
where deptno = 10;
Interrogation à travers une vue.
Une vue peut être référencée dans un SELECT au même titre qu'une table.
Tout se passe comme si la table, virtuelle, existait réellement bien que reconstituée à chaque appel de
la vue.
Exemple:> select * from dept_10;
Mise à jour à travers une vue.
Il est possible d'effectuer des mises à jour au travers de vues, sous certaines conditions.
Ne pas oublier la clause WITH CHECK OPTION qui contrôle l'intégrité en interdisant par exemple
d'insérer des lignes ou de modifier des lignes qui ne feraient pas ou plus partie de la vue.
Exemple: SQLWKS> update dept_10
Set JOB = 'ANALYST'
Where job is null;
V. Les Séquences
• Maximum Value : indiquez la valeur maximale que la séquence peut générer. Cette valeur
entière peut comporter 28 chiffres ou moins. Elle doit être supérieure aux valeurs Minimum
Value et Initial. L'option Unlimited indique une valeur maximale de 1027 pour une séquence
croissante et de -1 pour une séquence décroissante. La valeur par défaut est Unlimited.
• Minimum Value : indiquez la valeur minimale de la séquence. Cette valeur entière peut
comporter 28 chiffres ou moins. Elle doit être inférieure ou égale à Initial, et inférieure à
Maximum Value. L'option Unlimited indique une valeur minimale de 1 pour une séquence
croissante et de -1026 pour une séquence décroissante. La valeur par défaut
est Unlimited.
Lorsque vous cliquez sur l'un des liens, la page Results s'affiche. Dans la région Search de la page, vous
pouvez entrer un nom de schéma et un nom d'objet afin de rechercher un objet spécifique. En outre, vous
pouvez rechercher d'autres types d'objet via la région Search, en sélectionnant le type d'objet dans le menu
déroulant. Le menu déroulant inclut des types d'objet qui ne sont pas présentés sous forme de liens dans la
page Database Administration.
Création de séquences.
Les séquences sont des données de type numérique.
Syntaxe.
Pseudo-colonnes utilisables.
Deux variables peuvent être utilisées pour obtenir les valeurs de la séquence.
CURRVAL numéro de séquence en cours.
NEXTVAL prochaine valeur
Exemples: CREATE SEQUENCE eseq
59
INCREMENT BY 10
START with 5000;
Modification de séquences.
Le but est de modifier les paramètres d'une séquence existante.
Syntaxe.
Utilisation de séquences
Insert into emp (empno,ename,deptno) values (eseq.nextval,'ALTER1 SEQ',40);
Suppression de séquences.
Syntaxe.
Définition.
Il s'agit de référencer un objet différemment en lui donnant un autre nom.
Il est possible d'affecter un synonyme à un objet de type:
Table.
Vue.
Séquence.
Synonyme.
Création de synonyme.
Syntaxe.
Examples
Creation du synonyme public Employees pour la table employees du schéma Hr de la base de donnés Sales
CREATE PUBLIC SYNONYM employees
FOR hr.employees@sales;
60
Suppression de synonyme.
Syntaxe.
UPDATE orders@sales.hq.acme.com
SET order_total = order_total + 500;
TABLESPACE_NAME FILE_NAME
------------------------------- --------------------
USERS /oracle/dbs/tbs_21.f
USERS /oracle/dbs/tbs_22.f
2) Marquer le début de la sauvegarde des fichiers à chaud :
ALTER TABLESPACE users BEGIN BACKUP;
3) sauvegarder les fichiers
Utiliser des commandes OS pour copier les fichiers sur une autre destination :
63
% cp /oracle/dbs/tbs_21.f /oracle/backup/tbs_21.backup
% cp /oracle/dbs/tbs_22.f /oracle/backup/tbs_22.backup
4) marquer la fin de la sauvegarde à chaud
ALTER TABLESPACE users END BACKUP;
III. Sauvegardes et Restaurations logique
Introduction
Avant tout il faut préciser que cette méthode est une méthode logique de sauvegarde (Export) et de
restauration des données (Import). Elle va nous permettre de sauvegarder le contenu logique d'une base de
données dans un fichier de transfert Oracle au format binaire, ou fichier dump. Ce fichier pourra donc être relu
pour recréer des objets qu'il contient. Ce transfert peut s'accomplir sur une même base ou même sur deux
bases Oracle, et cela même si leurs configurations matérielles et logicielles diffèrent. Cela signifie que l'on
peut tout à fait exporter une base sous Windows pour l'importer sous Linux ou Unix (sauf pour les tablespaces
transportables).
Ces deux utilitaires qui peuvent être alors employés comme des techniques de sauvegarde peuvent être
exécutés à partir de n'importe quel client NET*8 (le fichier DUMP est traité, dans ce cas, de manière locale par
rapport au client : lors d'un import ou d'un export à partir d'un client NET*8, il faut faire attention car cette
opération peut augmenter le trafic du réseau et affecter ce dernier de manière importante. Autre précision de
taille : la version de l'utilitaire Import ne peut être antérieure à celle de l'utilitaire Export, plus précisément on
ne saurait exporter une base de données Oracle 9i pour l'importer sur une base de données 8i avec leur
utilitaire d'origine. Et enfin dernier détail mais non des moindres, ne compressez jamais un fichier dump avec
un outil de compression système Winzip (Windows) ou GZIP (Linux - Unix), vous risqueriez d'avoir de
mauvaises surprises lors de sa décompression.
III 1 :Les différents modes d'export et d'import
1. Niveau base de données complète
C'est le mode le plus complet, lors de ce type d'exportation tous les objets de la base sont exportés à
l'exception de certains utilisateurs : SYS, ORDSYS, CTXSYS, MDSYS et ORDPLUGINS. Par contre les
informations relatives aux structures de base de données, telles que les définitions de tablespaces et de
segments de rollback, sont incluses. Lors de L'insertion des données tout ces objets sont importés et créés
dans la base de destination : le paramètre FULL permet de spécifier ce mode pour l'exportation et
l'importation.
2. Niveau utilisateur
Dans ce cas là, ce sont tous les objets appartenant à un utilisateur qui sont exportés: tables, fonctions,
synonymes, déclencheurs, liens de bases de données… Le paramètre OWNER permet de désigner les
utilisateurs que l'on désire exporter et le paramètre FROMUSER désigne quel est l'utilisateur à importer du
fichier Dump (le paramètre TOUSER nous indique quand à lui le schéma destinataire).
3. Niveau table
Lors de l'exportation de tables individuelles tous leurs objets associés (index, contraintes, déclencheurs,
privilèges …) sont écrits dans le fichier DUMP. Lors de l'importation tout comme l'exportation les tables
doivent être nommées grâce au paramètre TABLES.
4. Niveau tablespace
Lors de l'exportation, des métas donnés concernant les tablespaces spécifiés et les objets qu'ils contiennent
sont écrites dans un fichier DUMP.
5. Privilèges pré-requis
Actions Privilège ou rôle nécessaire
Exporter son propre schéma CREATE SESSION
Exporter d'autres schémas SYSDBA, EXP_FULL_DATABASE et DBA
Exporter la base entière ou tablespaces EXP_FULL_DATABASE
64
Importer un objet du fichier DUMP IMP_FULL_DATABASE
Paramètres d'export
Valeur par
Paramètre Description
défaut
Userid chaîne de connexion à la base de données
Buffer Taille du buffer de transfert 4096
Compress Compression des extents en un seul Y
Contraints Export des contraintes Y
File Nom du fichier DUMP expdat.dmp
Nom du fichier de sortie du compte-rendu, pour
Log
voir les erreurs en particulier
Full Export de toute la base N
Grants Export des privilèges Y
Affiche la liste des paramètres supportés, aucun
Help N
DUMP généré.
Indexes Export des index Y
Owner Utilisateur(s) à exporter userid
Parfile Fichier contenant les paramètres d'export
Indique que l'export doit stocker les informations
Record Y
sur les exports et les objets exportés
Export incrémental (COMPLETE, CUMULATIVE,
Inctype
INCREMENTAL)
Rows Export des lignes
Tables Table(s) à exporter
Positionne sa session en " READ ONLY " le
Consistent temps de l'export. Cela permet donc de préserver N
la cohérence des données exportées.
Direct Chargement direct par tableau N
Statistics Analyse des objets exportés ESTIMATE
Point_in_time_Recover Indique si on autorise l'export des tablespaces N
Recover_Tablespaces Liste des tablespaces à sauvegarder
Paramètres d'import
65
Valeur par
Paramètre Description
défaut
Userid chaîne de connexion à la base de données
Buffer Taille du buffer de transfert 10240
Commit Ecriture régulière des blocs de données N
File Nom du fichier DUMP expdat.dmp
Nom du fichier de sortie du compte-rendu, pour
Log
voir les erreurs en particulier
Fromuser Utilisateur à exporter vers TOUSER
Full Import de tout le contenu du DUMP N
Grants Export des privilèges Y
Affiche la liste des paramètres supportés, aucun
Help N
DUMP généré.
Ignore Ignore les erreurs et continue l'import N
Indexes Import des index Y
Parfile Fichier contenant les paramètres d'import
Rows Import des données Y
Détruit les objets s'ils existent avant de les
Destroy N
importer
Liste le contenu du fichier d'export, aucune
Show N
opération n'est effectuée dans la base.
Tables Table(s) à importer
Touser Utilisateur destinataire
Code alphabet du pays de référence s'il est
Charset NLS_LANG
différent de celui de la création de base
Point_in_time_recover Indique si on autorise l'import des tablespaces N
Permet de repousser la reconstruction de l'index
Skip_unusable_indexes N
après l'insertion des données dont ils dépendent
Exécute la commande ANALYZE dans le fichier
Analyze Y
dump
- OU -
67
exp parfile=c:\backup\parfile.prm
imp system/manager file=c:\exp_scott.dmp log=c:\exp_scott_log.txt
owner=scott rows=n
- OU -
imp parfile=c:\backup\parfile.prm ;
III.4 : SQL*Loader
SQL*Loader est, comme son nom l'indique un utilitaire de chargement spécifique pour les bases Oracle. Il
permet d'initialiser une base de données, ou plus précisément une ou plusieurs tables avec des données
issues d'un fichier texte.
Ainsi si l'on souhaite migrer des données d'un fichier Mainframe vers Oracle, on pourra extraire les données
du fichier d'origine pour produire un fichier texte et ensuite utiliser SQL*loader pour effectuer le chargement
automatique de la (ou des) table(s).
Commande minimale :
sqlldr nom_user/mot_de_passe@base control=nom_fic.ctl
La structure de la table cible doit être créée avant le chargement, SQL*Loader à la différence d'autres
outils ne crée pas la table.
La structure de la table cible doit être créée avant le chargement, SQL*Loader à la différence d'autres outils ne
crée pas la table.
Options de la ligne de commandes
option description Defaut
userid username et mot de passe
control nom du fichier de controle du loader
data nom du fichier de données d'entrée
log nom du fichier de trace
bad nom du fichier des enregistrements rejetés
parfile nom du fichier contenant les parametres de la commande...
skip n nombre d’enregistrements logiques à sauter 0
load n nombre à charger all
errors n nombre max d'erreurs autorisées 50
rows n nb de lignes du tableau utilisé pour les entrées 64
bindsize taille du tableau précédent en bytes OSdep
silent n'affiche plus les messages pendant l'execution
direct utilise l'accès direct (direct path) false
parrallel chargement en mode parrallelisé false
file fichier d'allocation pour les chargements parralleles
fichier des enregistrements non chargés intentionnellement (saut
discard
conditionnel)
discardmax nombre maximums de ces enregistrements non chargés all
Le contenu du fichier de controle, par étapes
1. Spécification des entrées
load data infile nom_fic | *
nom du fichier d'entrée ou * si les datas sont à la suite :
69
Exemples
1) load data infile c:\temp\entrees.dat
2) load data *
...
begindata
1000;Martin;Essonne
2000;Dupont;Marne
...
Mode de chargement
insert insère les datas dans une table vide,
append insère les datas à la suite des données existantes,
-- param.ctl
LOAD DATA INFILE 'monfic' --fichier à charger (.dat)
REPLACE --ecrase la table
INTO TABLE matable
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"' --car. de séparation
( NUMERO, NOM, PRENOM , DATE_NAISSANCE date "DDMMYY", SEXE)
Fichier de contrôle avec entrées au format fixe
LOAD DATA INFILE 'monfic.fix'
70
REPLACE
INTO TABLE matable ( NUMERO position(1-5) char,
position de début et de fin du champ
NOM position(6-35) char, PRENOM position (36-50) char,
DATE_NAISSANCE position (*) date "DDMMYY",
--indique la position suivante
SEXE position(*) char
--longueur iimplicite pour char : 1 )
Chargement de 2 tables à partir d’un fichier
Un fichier (3 champs) éclaté dans 2 tables (chacune 2 colonnes) une pour les employes, l'autre pour les
projets avec une colonne de jointure sur le no d'employe...
fichier d'entree :
1000-deleglise-------10
2000-martin----------20
3000-dupont----------10
...
fichier de contrôle
...
into table employes
(no_emp position(1:4) integer external,
nom position (6:20) char)
into table projet
(no_emp position (1:4) integer external,
no_projet position (22:25) integer external)
...
Il existe différents moyens de dupliquer une base donnée, soit en passant par une sauvegarde logique de la
base de données qu'on importe sur la base clone (Utilitaires EXPORT /IMPORT) soint en utilisant RMAN
(Recovery Manager) ou une par une sauvegarde complète physique et une restauration complète sur la base
clone.
Nous étudierons le cas de duplication d’une base de données par les utilitaire import et Export et celui de la
sauvegarde physique complète et restauration.
71
6. Créer l’Instance qui pointe sur le fichier pfile du même nom que l’instance source (voir le cours sur la
gestion d’instance à la page 16).
7. Demarrer la base clone en ouverture
c. Importation des objets d’un schéma (utilisateur) d’une base de données à une autre
73
ou plus simplement créez un synonyme pour ce nom de table, qui vous évite de préfixer à chaque fois :
SQL> CREATE SYNONYM nom_table FOR nom_propriétaire.nom_table;
solution 3 (vous n'avez pas les droits d'accès) demander au DBA de vous donner les droits !
ou si vous connaisser le mot de passe du propriétaire, donnez vous les droits :
SQL> connect propriétaire / mot_de_passe
SQL> GRANT SELECT ON nom_table TO mon_nom_a_moi;
ORA-01031: insufficient privileges
Tentative de donner des droits à quelqu'un sur une table qui ne nous appartient pas
exemple :
SQL> grant select on scott.emp to autre_user
ERREUR à la ligne 1 :
ORA-01031: insufficient privileges
Attention !! Même le DBA peut rencontrer ce genre d'erreur (c'est un comble !), bien qu'il ait les
droits de lecture sur la table
solution
Pour contourner ce problème le propriétaire de la table doit donner le droit de lecture ET le droit de
donner des droits !
SQL> connect propriétaire / mot_de_passe
SQL> GRANT SELECT on la_table TO le_gras_qui_veut_la_lire_et_la_faire_lire WITH GRANT OPTION;
...c'est le 'WITH GRANT OPTION' qui fait tout.
Les LOGs ou traces : permet d'enregistrer tout ou partie des informations concernant les accès
(réussis ou échoués). Cette trace pourra être plus ou moins verbeuse et son volume étroitement
surveillée. De ce fait on l'utilisera de manière cibllée sur des périodes de temps spécifiques
tolérance aux pannes : permet par du matériel ou du logiciel redondant (CPUs, disques, IOs) de
supporter de manière partiellemnt ou complètement transparentes différents types de pannes, tant au
niveau du client, que du réseau, que du serveur. Une tolérancec totale a bien sur un cout certain.
sauvegarde et restauration
Sauvegarder les données sur des supports externes (disques, bandes, etc.) et pouvoir les restituer, les
plus à jour possible. le but est de ne pas perdre de données suite à un pb matériel (panne disque) ,
logiciel (bug) ou une fausse manipulation d'un utilisateur.
mécanismes transactionnels
L’atomicité des transactions, par définition assure la cohérence des données, même dans des
environnements distribués. L'image avant modification, stockée de manière redondante dans ou hors de
la BD, permet de faire d'éventuels retours arrière pour retrouver le dernier état cohérent, ou de s'assurer
qu'il n'y aps pas eu d'opérations partielles ou incomplète (transaction bancaires par exemple)
(1) la vue est pratiquement le seul contrôle d'accès offrant un niveau de granularité ligne ou colonne ! et
qui plus est de manière contextuelle, en les paramétrant (tranches horaires, @ IP, etc.)
4. Les principales menaces
Au dela des attaques accidentelles ou les défaillances du système, les attaques 'malveillantes' nous
intéresserons + particulièrement.
Les menaces les plus connues du grand public, visent à paralyser, ou détruire tout ou partie du système
d'information. Elles ne ciblent pas vraiment les SGBDs mais nous les citerons néanmoins parce
qu'incontournables. Jetons un oeil aux définitions données par le grand glossaire de la sécurité de
ECHU.ORG :
Virus : Au sens large du terme, on qualifie généralement de virus tout programme capable de se
reproduire (techniquement, se recopier) lui-même et d'endommager des données informatiques. On
les classe en plusieurs catégories, principalement: parasite, compagnon, amorce, multiformes,
résident mémoire ou non, furtifs, polymorphes, réseau et flibustier. Pour plus de détails reportez-vous
aux définitions correspondantes.
Ver (ou Worm) : programme qui peut s'auto-reproduire et se déplacer à travers un réseau en utilisant
les mécanismes réseau, sans avoir réellement besoin d'un support physique ou logique (disque dur,
programme hôte, fichier ...) pour se propager; un ver est donc un virus réseau.
77
Cheval de Troie : (en anglais trojan horse) un programme informatique effectuant des opérations
malicieuses à l'insu de l'utilisateur : vol des mots de passe, copie de données sensibles, exécution
d'action nuisible ...
Une intro très accessible de ces notions est dispo sur : http://www.commentcamarche.net/ et d'autres
infos encore sur : http://assiste.com
Un peu moins connus mais plus probables dans le domaine des SGBDs :
Back doors : ("Portes dérobées") : Programmes usurpateurs qui détournent des fonctionnalités
systèmes dans le but d'ouvrir des accès utiles aux pirates pour contrôler à distance les machines
ciblées (modification des programmes de login avec user/passwd en dur, ouverture de ports
particuliers, etc.). Ces programmes sont la plupart du temps installés par le biais d'un "cheval de
Troie". Parmi les plus (tristement) célèbres, on peut citer BackOrifice (BO) ou encore NetBus.
Les accès illicites via ces backdoors pouvant être facilement détectés par des commandes système
standards (liste des process connectés, des ports ouverts) ils sont parfois utilisés conjointement avec
des rootkits, ensemble de commandes standards modifiées pour masquer les intrusions.
certaines back doors peuvent être inclsues dans le code d'applications standards, sans intention
forcément malveillante mais pour réserver au développeur du programme, un accès 'privé' à toutes
les machines hébergeant son code. L'accès à la source d'un logiciel libre peut nous prémunir contre
ce genre d'indélicatesse.
altération du SQL, Buffer Overflow
5. Les principales failles de sécurité...ou de comportement
'portes' ouvertes : (pas seulement les 'back doors' !)
porte de la salle machine ouverte, poste ou serveur sans mot de passe ou mot de passe faible, poste
sans veille, post it (!) ; recommandation : fermez les portes !! mettez en oeuvre la gestion de mots de
passe !!
Installation par défaut :
- les valeurs de paramètres sont connues (port 80 / 1525, mot de passe SYS et SYSTEM,
- des services superflus sont accessibles (srv ftp, srv samba, snmp, serveur d'admin, etc
- les communications ne sont pas chiffrées (ftp, telnet, pop) ; recommandation : lisez la doc !! auditez vos
serveurs !!
Mauvaise politique de gestion des droits (top, au lieu de bottom-up) :
- installation confortable : tous les logiciels sont installés sous root, tous les utilisateurs de l'applicatif
sont DBAs
- allow all implicite...deny N / deny all.. allow n
- utilisation abusive de l'héritage ; recommandation : maitrisez la gestions des droits de vos OS /
logiciels serveurs / bases de données
bugs (qui peuvent provoquer un simple déni de service voire l'arrêt du système) ;-) faites de la veilles,
patchez régulièrement
Mauvais codage (parametres en clair dans les URLs, connexion non chiffrées, etc.)
;-) documentez vous (best practices, faites tester vos programmes)
Controle d'accès au niveau applicatif, qui peut facilement être court circuité
;-) (re) centralisez (ET FACTORISEZ!) les controles au niveau données : contraintes d'intégrité
Comme chacun sait (depuis certaines émissions de télé) c'est le maillon le plus faible de la chaîne qui cassera
imanquablement. On peut mettre en place le plus beau (et le + cher) des firewalls, il sera bien inutile si un
adminitrateur est resté 'loggé' root sur son poste (Statistiquement la majorité des attaques provient de
l'intérieur des entreprises !)
Cependant, on n'oubliera pas de rester pragmatique : tous les PMEs ne sont pas le pentagone et n'intéressent
pas tous les hackers de la planète. Les besoins et les objectifs doivent être clairement définis au départ et
l'adéquation de la solution vérifiée. Un certains nombres d'utilitaires libres sont disponibles sur internet pour
vérifier la fiabilité de votre système d'information. Voir parmi la liste des liens utiles.
Il faudra de + trouver un équilibre entre niveau de sécurité satisfaisant et confort (voire simple possibilité) de
travail des autres acteurs.
78
79