1
Ingénieurs 2000 – Informatique et Réseaux
TP
Administration Oracle
DIOP Ngoné
ESSAIDI Abderrahim
Février 2008
Sommaire
Sommaire ... 2
Introduction ... 3
1. Déploiement d’application ... 4
1.1 Résumé du besoin ... 4
1.2 Notions de tablespaces ... 4
1.3 Notions d’utilisateur ... 4
1.4 Mise en place de l’application... 4
2. Etudes statistiques du serveur ... 6
2.1 A propos des statistiques ... 6
2.2 PerfStat ... 6
2.3 Oracle Entreprise Manager ... 6
2.4 Résolution d’une anomalie sur le serveur ... 7
Conclusion ... 8
Annexe ... 9
Introduction
L’objectif de ce TP est tout d’abord de nous familiariser avec l’environnement d’Oracle et le langage de requête SQL via l’outil oracle SQL PLUS mais également de découvrir des méthodes de gestion avancées des bases de données sous Oracle.
En effet, ce dernier possède malgré tout certaines restrictions comme le fait d’utiliser une instance du moteur d’Oracle pour chaque base de données, ce qui peut être très gourmand en ressources dès lors que le nombre de bases de données est important.
L’objectif de ce TP va donc consister en d’une part la mise en place d’un canvas de déploiement d’applications indépendantes sur la même base de données Oracle.
D’autre part il va consister à mettre en place un système de monitoring. Ce système va nous permettre, entre autres, de visualiser le trafic et ainsi détecter les problèmes potentiels sur notre base.
1. Déploiement d’application 1.1 Résumé du besoin
Le but de cette partie du TP est de mettre en place un canvas de déploiement d’applications indépendantes sur la même base de données Oracle.
Nous allons créer un tablespace et un compte utilisateur pour chacune des applications.
Ces dernières étant indépendantes, l’utilisateur n’a accès qu’à son tablespace. Cela permet donc à celui-ci de travailler librement et d’avoir l’impression qu’il est seul sur la même base, alors que d’autres accès concurrent sont admis.
1.2 Notions de tablespaces
Un tablespace est un espace logique qui contient les objets stockés dans la base de données comme les tables ou les indexes. Une base de données contient donc un ensemble de tablespaces
Un tablespace est composé d'au moins un datafile, c'est à dire un fichier de données qui est physiquement présent sur le serveur à l'endroit stipulé lors de sa création. Chaque datafile est constitué de segments d'au moins un extent (ou page) lui-même constitué d'au moins 3 blocs : l'élément le plus petit d'une base de données.
1.3 Notions d’utilisateur
Un utilisateur de base de données va correspondre à un login qui aura reçu certains privilèges. Cet utilisateur sera stocké dans le dictionnaire de données et disposera d'un espace de stockage pour ses objets qui seront alors stockés dans son schéma.
En Oracle on pourra assimiler un utilisateur avec un tablespace comme on aurait associé un utilisateur à un schéma de la base de données.
1.4 Mise en place de l’application
Nous allons utiliser SQL Plus pour la mise en place des tablespaces. Cette interface permet de manipuler aisément la base de données Oracle. Pour se connecter à cette interface, on tape la commande sqlplus / as sysdba.
1.4.1 Création du tablespace
Le script ci-dessous permet de créer un tablespace qui va par la suite être associé à l’utilisateur qui sera par la suite, créé.
TABLESPACE=mytablespace
$sqlplus / as sysdba
prompt CREATE SMALLFILE TABLESPACE "$TABLESPACE" DATAFILE
'/data/TOPO/$TABLESPACE' SIZE 100M REUSE LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
1.4.2 Création de l’utilisateur
Nous allons créer un utilisateur dont le nom sera le même que le nom du tablesapce qu’on vient de créer un le mot de passe sera « mypass ». Le script ci-dessous permet de réaliser cette tâche.
MOTDEPASSE=myspass TABLESPACE= mytablespace
prompt CREATE USER "$TABLESPACE" PROFILE "DEFAULT" IDENTIFIED BY
"$MOTDEPASSE" DEFAULT TABLESPACE "$TABLESPACE" TEMPORARY TABLESPACE
"TEMP"QUOTA UNLIMITED ON "$TABLESPACE" ACCOUNT UNLOCK;
prompt GRANT "DINIROLE" TO "$TABLESPACE";
GRANT "DINIROLE" TO "$TABLESPACE";
1.4.3 Droits d’accès à la base
Ce script permet de donner les privilèges de connexion à la base de données à notre utilisateur.
TABLESPACE=mytablespace
prompt GRANT "CONNECT" TO "$TABLESPACE";
prompt GRANT "DINIROLE" TO "$TABLESPACE";
1.4.4 Analyse
Lors du TP un script a été utilisé pour faciliter la création d’un tablespace et le compte associé. Les scripts simplifient et sécurisent les tâches fastidieuses d’administration d’une base de données. Celui-ci nous a permis de créer rapidement un tablespace en fournissant uniquement un nom et un mot de passe.
Le script complet est disponible en annexe.
2. Etudes statistiques du serveur 2.1 A propos des statistiques
Dans cette partie du TP, nous allons avoir l’occasion de mettre en place un système de monitoring. Ce système va nous permettre, entre autres, de visualiser le trafic et ainsi détecter les problèmes potentiels sur notre base.
2.2 PerfStat
PerfStat est un ensemble d’utilitaires (scripts, packages, procédures et fonctions stockées) qui permet de suivre finement les performances des bases Oracle. Il est notamment utilisé pour contrôler les flux entrant et sortant du serveur de base de données.
Il fournit des fonctionnalités supérieures aux outils classiques.
La commande « sprepart.snap » permet de faire une capture de la BDD à un moment spécifique.
Pour l’analyse statistique, il faut lancer la commande « sqlplus perfstat/perfstat ». Un fichier de trace est généré. Il détaille tout l’historique du serveur. Les données suivantes sont mises en évidence :
- moyennes d’exécution des requêtes - accès à la mémoire
- accès au CPU.
2.3 Oracle Entreprise Manager
L’application Oracle Enterprise Manager (OEM or EM) permet de gérer mes applications développées par Oracle notamment sa base de données. Il fournit un outil de monitoring graphique qui permet de suivre la « vie » d’une base de données Oracle depuis une application web.
2.4 Résolution d’une anomalie sur le serveur
Une analyse statistique a été effectuée sur le serveur de base de données. Au terme de celle-ci, nous avons constaté qu’une ressource utilisait la quasi-totalité du CPU du serveur. L’utilisation excessive de cette ressource était due au fait que le serveur, à chaque requête, fait un scan complet de toutes les tables concernées.
La correction de ce problème a été relativement simple. Des index on été ajoutés à la colonne de la table sur laquelle le serveur faisait le scan.
Par la suite, les requêtes se sont effectuées en utilisant l’index créé. Cette intervention nous a permis de baisser d’optimiser les performances du serveur en baissant le taux d’utilisation du CPU.
Conclusion
Nous avons vu dans ce TP les forces d’Oracle et comment contourner ses faiblesses. Ce TP nous a également permis de nous familiariser avec son langage de requête SQL, son outil Oracle SQL PLUS et son interface web d’administration. Enfin nous avons pu découvrir les canvas de déploiement d’applications ainsi que le système de monitoring
Annexe
#! /bin/bash
echo "Choix du nom de la table space : "
read TABLESPACE
TABLESPACE=` echo "$TABLESPACE" | tr [a-z] [A-Z]`
echo "mot de passe : "
read MOTDEPASSE
echo” lancement du script””
echo”creation du tablespace”
sqlplus / as sysdba << !EOD
prompt CREATE SMALLFILE TABLESPACE "$TABLESPACE" DATAFILE
'/data/TOPO/$TABLESPACE' SIZE 100M REUSE LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
CREATE SMALLFILE TABLESPACE "$TABLESPACE" DATAFILE
'/data/TOPO/$TABLESPACE' SIZE 100M REUSE LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
Echo “creation du premier compte utilisateur”
prompt CREATE USER "$TABLESPACE" PROFILE "DEFAULT" IDENTIFIED BY
"$MOTDEPASSE" DEFAULT TABLESPACE "$TABLESPACE" TEMPORARY TABLESPACE
"TEMP"QUOTA UNLIMITED ON "$TABLESPACE" ACCOUNT UNLOCK;
prompt GRANT "DINIROLE" TO "$TABLESPACE";
GRANT "DINIROLE" TO "$TABLESPACE";
!EODCREATE USER "$TABLESPACE" PROFILE "DEFAULT" IDENTIFIED BY
"$MOTDEPASSE" DEFAULT TABLESPACE "$TABLESPACE" TEMPORARY TABLESPACE
"TEMP" QUOTA UNLIMITED ON "$TABLESPACE" ACCOUNT UNLOCK;
Echo “connection sur la base”
prompt GRANT "CONNECT" TO "$TABLESPACE";
GRANT "CONNECT" TO "$TABLESPACE";
prompt GRANT "DINIROLE" TO "$TABLESPACE";
GRANT "DINIROLE" TO "$TABLESPACE";
!EOD