Base de Donnees Approfondie PDF
Base de Donnees Approfondie PDF
Base de Donnees Approfondie PDF
UNIVERSITE LIBERTE
COURS DE BASES DE DONNEES APPROFONDIES
PREMIER GRADE INGENIERIE DES SYSTEMES D’INFORMATION
Par Assistant Bertin LOBO MINGA
PLAN DU COURS
CHAPITRE I : NOTIONS GENERALES SUR LES BASES DE DONNEES
l’algèbre relationnelle
le langage SQL de base
les vues
les déclencheurs
la gestion des utilisateurs
o modèle en constellation
o passage du modèle conceptuel au modèle logique multi
dimensionnel
Le cube OLAP
o présentation
o principales opérations sur un cube OLAP
réalisation d’un mini projet BI (Business Intelligence)
Objectifs du cours :
Exercices
3. Ecrire une requête SQL qui affiche la phrase suivante : "le chemin à
parcourir es encore long"
4. IS NULL
5. CONCAT
6. LIMIT
8. LES OPERATEURS
9. LIKE
10. IN ET NOT IN
REPLACE
SUBSTR
LOWER ET UPPER
jointure
Ecrire une requête SQL qui crée une vue de deux alias différents pour
chacun des champs de la table promotion
C:\Windows\System32>mysql -u harmonie -p
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
C:\Windows\System32>mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.17 MySQL Community Server (GPL)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> exit
Bye
C:\Windows\System32>mysql -u harmonie -p
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
C:\Windows\System32>mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.17 MySQL Community Server (GPL)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> exit
Bye
C:\Windows\System32>mysql -u harmonie -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.6.17 MySQL Community Server (GPL)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
LES VUES
LES DECLENCHEURS
Identificateur OLD
Utilisateur de NEW
introduction
principe
la mise à jour synchrone
la mise à jour asynchrone
Réplication avec le SGBD MySQL
1. Introduction
Bien entendu il est tout à fait possible de faire de la réplication dans les deux
sens (de l’esclave vers le maître et inversement). On parlera dans ce cas-là de
réplication bidirectionnelle ou symétrique.
Une modification sur le site primaire sera propagée aux sites secondaires à
l’aide par exemple d’un trigger sur la table modifiée. La table est modifiée en
temps réel sur les autres sites, ces modifications faisant parties de la
transaction.
Dans ce cas, il n’y a pas de table maître, mais chaque table possède ses
triggers, déclenchés lors d’une modification. Il est alors nécessaire de définir
des priorités et de gérer les blocages des tables en attendant qu’une
modification soit entièrement propagée. D’autre part, les triggers doivent
différencier les mises à jour issues d’une réplication des mises à jour de
requête directes.
stocke les opérations intervenues sur une base de données dans une queue
locale pour les propager plus tard à l’aide d’un processus de
synchronisation.
Ce type de réplication est plus flexible que la réplication synchrone. Il permet
en effet de définir les intervalles de synchronisation, ce qui permet à un site
de fonctionner même si un site de réplication n’est pas accessible.
L’utilisateur peut ainsi déclarer que la synchronisation sera effectuée la nuit,
à une heure de faible affluence. Si le site distant est victime d’une panne,
l’absence de synchronisation n’empêche pas la consistance de la base
maître. De même une panne de réseau laissera les deux bases, maître et
esclave dans des états de consistance. Les opérations sur les données sont
plus rapides, puisqu’une requête n’est pas immédiatement déployée. Le
trafic sur le réseau est de ce fait plus compact. Par contre, le planning de
réplication est dans ce cas plus complexe, puisqu’il s’agit de gérer les conflits
émanant d’un éventuel accès en écriture sur une base esclave entre deux
mises à jour.
Pratique
Deuxième machine:
Tout fermer
Redémarrer les deux wamps
Se connecter sur la première machine avec le nouveau root
Démonstration
Créer une base de données sur le maitre et la voir sur l'esclave:
Si rien n'est vu, se reconnecter sur la deuxième machine et relancer la
commande de réplication.
Oracle Server Standard, une version comprenant les outils les plus courants
de la solution Oracle. Il ne s'agit pas pour autant d'une version bridée...
Oracle Server Enterprise Edition
processus Oracle:
o processus serveur: Il fonctionne sur la machine serveur (hôte). suite à
la demande du processus utilisateur, le processus serveur lit les
données des fichiers à l'intérieur du buffer de données. il utilise une
PGA (Program Global Area) exclusive. il envoie les résultats au client.
les fichiers de données (Data Files): ils sont utilisés pour stocker le
dictionnaire de données et les objets de la base de données. ces fichiers
sont souvent volumineux. les données dans le buffer de données et le
dictionnaire de données et le dictionnaire de cache sont récupérées de ces
fichiers. une base de données contient au moins un fichier de données.
les fichiers de reprise (Reprise Log File): ils sont utilisés pour stocker les
informations Redo sur le disque afin de garantir la reconstruction des
données en cas de panne. Une base de données requiert au moins deux
fichiers log.
les fichiers de contrôle (Control Files): ils sont utilisés pour définir la
localisation des composants disque sur le serveur. la localisation de fichiers
de données et les redo logs y apparaissent. Pour cette raison, ils sont
modifiés à chaque ajout ou suppression des fichiers redo logs ou fichiers
de données. Oracle lit les fichiers de contrôle au démarrage de la base de
données. Une base de données requiert au moins un fichier de contrôle.
La taille d'un data file est exprimée en Kilo ou en Méga octets. Elle est attribuée
au moment de la création du fichier, mais peut être modifiée. Le premier fichier de
données créé doit avoir une taille supérieure ou égale à 2Mo.
Il existe aussi d’autres fichiers spéciaux tels que le fichier paramètre et le fichier de
mot de passe. Le premier est utilisé pour définir les caractéristiques d'une instance
Oracle (taille SGA, Bloc Oracle, etc.) c'est le fichier init.ora.
Le second est utilisé pour établir l'authenticité des utilisateurs privilégiés de la base
de données Oracle.
La structure logique d’une base Oracle
Une base de données est composée d'un ensemble d'unités logiques dites
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.
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.
L'extent n'a aucune signification particulière, c'est juste un groupe de blocs
contigus pouvant accueillir des données,
un tablespace par défaut: qui est celui dans lequel les tables de l'utilisateur
seront créées de façon privilégiée
un tablespace temporaire: qui est utilisé pour les tris et en cas
d'insuffisance en mémoire centrale
Les segments de données servent à stocker les données des tables utilisateurs et
système. Chaque table a un et un seul segment qui contient toutes les données
de la table créé automatiquement.
Les segments d'index stockent les informations sur les index séparément de
données créés lors de la création d'un index.
Les segments temporaires sont utilisés pour le traitement des commandes SQL
nécessitant un espace disque temporaire (order by, group by, distinct, union,
intersect ou minus).
Vues du dictionnaire:
protègent le contenu des tables du dictionnaire tout en rendant accessibles
les informations qu'elles contiennent
les vues USER (dont le nom commence par USER_XXX) donnent des
informations sur tous les objets dont l'utilisateur connecté est propriétaire
(tables, index, vues, procédures, ...)
les vues ALL (dont le nom commence par ALL_xxx) fournissent des
informations sur les objets pour lesquels l'utilisateur a un droit d'accès, c'est
à dire les objets de la base créés par l'utilisateur ainsi que tous les objets
accessibles par cet utilisateur
les vues DBA (dont le nom commence par DBA_XXX). ces vues sont réservées
à l'administrateur de la base (DBA), afin de lui fournir des informations
sensibles sur tous les objets de la base de données.
les vues V$ (dont le nom commence par V$_) sont des vues dynamiques
permettant d'avoir des informations sur l'état courant de l'instance de la base
de données de sont démarrage à son arrêt. Elles permettent par exemple de
connaître les fichiers physiques actuellement utilisés par la base (logs,
rollbasck segments,..)
chaque xxx est en général remplacé par un nom (en anglais) significatif. Ainsi
USER_TABLES est la vue de toutes mes tables, DBA_SYNONYMS est la vue
de tous les synonymes du système
Il y a trois étapes:
Analyse
Exécution
Récupération
Analyse
Exécution
Récupération
Une instance est un moyen d'accéder à une base de données Oracle. Elle ouvre une
seule et unique base de données. Elle est identifiée par Oracle_SID au niveau de
l'OS
Le schéma de la structure logique d'une base de données Oracle
Même s'il est parfois plus confortable d'utiliser un outil graphique, tel que Toad ou
SQL Developer, il faut aussi savoir se contenter de la ligne de commande. Tout
d'abord, parce que nous n'avons pas toujours le choix ! Mais même au-delà, il peut
s'avérer plus simple et plus rapide de lancer une invite SQL*Plus plutôt que
l'artillerie lourde d'un client graphique.
Nous allons donc voir que SQL*Plus permet d'envoyer des commandes SQL et
PL/SQL au SGBDR, mais aussi d'exécuter ses propres commandes internes.
Nous parlerons notamment des scripts et des variables gérés par SQL*Plus. Nous
apprendrons également à manier son buffer et paramétrer l'affichage des résultats
afin de les rendre plus lisibles. Enfin, nous verrons comment exporter les résultats
de nos requêtes dans des fichiers.
Une base de données permet de stocker de l’information, sous quelque forme que ce
soit. Bien des façons de faire existent, l’important étant que les données soient
stockées de façon structurée selon une norme précise afin de nous permettre de les
consulter, de les mettre à jour ou encore d’en insérer de nouvelles. La base doit
donc être accompagnée d’un logiciel permettant de la gérer, le SGBD. C’est lui qui
va nous permettre d’interroger la base ou encore de gérer la sécurité (les droits
d’accès) et l’intégrité des données.
Reste à savoir comment consulter, modifier ou insérer des données dans la base.
En effet le SGBD ne fait pas tout, il faut bien lui dire quoi faire avec nos données ! Il
nous faut donc être capable de communiquer avec lui, c’est-à-dire lui donner des
ordres (appelés « requêtes ») et recevoir ses réponses. On utilise pour cela un
langage de requête, tel que le SQL.
Le modèle client-serveur
Ces deux composantes peuvent être installées sur un seul et même ordinateur ou
bien sur deux machines distinctes qui vont communiquer via le réseau.
Commencez donc par ouvrir une invite de commande. Sur Windows, tapez « cmd »
dans le menu Démarrer ou sur l'écran d'accueil et choisissez « Invite de
commande ».
Quel que soit votre système, la commande de connexion à SQL*Plus est la même
: sqlplus, suivie du nom d'utilisateur, du mot de passe et du nom du service auquel
se connecter. On peut résumer la commande :
L'invite de commande SQL> signifie que vous vous adressez à Oracle. Les
commandes que vous entrez sont alors des ordres SQL destinés au SGBDR et non
plus des commandes systèmes pour l'OS. Ainsi, à partir du moment où vous voyez
cette invite de commande, il n'y a plus de différence à faire selon que vous ayez
installé Oracle sur Linux ou sur Windows.
Et voilà, notre première connexion est ainsi établie ! À l'aide de l'outil SQL*Plus,
nous avons connecté notre client à notre serveur de base de données.
Déconnexion
Bien, nous savons maintenant nous connecter et envoyer des requêtes SQL à notre
base. Entrons maintenant dans le vif du sujet avec les premières fonctionnalités de
SQL*Plus.
les commandes SQL : le langage de requête utilisé pour extraire les données
de la base ;
les commandes PL/SQL : langage procédural propre à Oracle, utilisé pour
intégrer des requêtes SQL à des traitements procéduraux (c'est-à-dire en
utilisant des variables, des boucles, des structures de contrôles, etc.) ;
les commandes SQL*Plus : commandes internes de SQL*Plus, permettant
entre autre de le paramétrer, comme nous allons le voir dans un instant.
Tables de l'utilisateur HR
Même si vous ne parlez pas parfaitement anglais, vous devriez vite vous apercevoir
que ces tables ressemblent à l'organisation d'une entreprise. Plus précisément, cela
concerne un service de ressources humaines (« HR » signifie « HumanResources »).
On retrouve une table EMPLOYEES (employés), une table JOBS (métiers), une
table DEPARTMENTS (départements), etc.
Par défaut, cet utilisateur est désactivé. Si vous pouvez (base de Développement,
droits d'accès, etc.), alors vous pouvez l'activer à l'aide de la requête suivante,
connecté en tant que SYSTEM
Après cela, on donne à cet utilisateur un nouveau mot de passe (on ne connaissait
pas l'ancien de toute façon) :
Bref, si vous le pouvez, je vous invite donc à utiliser HR pour pouvoir exécuter les
exemples en même temps que moi.
Pour envoyer une requête SQL simple, il suffit de la taper et de valider par la
touche Entrée . Attention, n'oubliez pas le point-virgule final, sans quoi vous
reviendriez à la ligne plutôt que d'envoyer votre requête :
Il est en effet possible d'écrire des requêtes sur plusieurs lignes. Dans ce cas, le
retour à la ligne au milieu de la requête est indiqué par la numérotation de la
seconde ligne. Cela peut s'avérer pratique pour les requêtes un peu longues. De
plus, il est possible de copier-coller une requête depuis n'importe quel éditeur vers
la ligne de commande, les retours à la ligne sont alors gérés automatiquement.
SQL*Plus est capable de gérer des variables. Une variable, vous le savez, est une
zone mémoire dans laquelle on stocke une valeur afin de la réutiliser par la suite,
dans diverses situations.
Les variables utilisateurs sont des variables tout ce qu'il y a de plus classiques : on
les définit et on leur attribue une valeur avant de pouvoir les réutiliser. Prenez par
exemple la requête suivante :
Au sein d'une requête SQL, on utilise une variable en préfixant son nom d'une
esperluette (« & »). Comme vous pouvez le voir ci-dessus, à la place du nom de la
table est positionné la variable &matable. Au moment où l'on envoie cette requête
au SGBDR, SQL*Plus remplace la variable par sa valeur, à condition qu'elle ait été
définie au préalable bien sûr.
Pour définir une variable, on utilise la commande DEFINE (également abrégée DEF)
:
Une définition de variable est une commande interne à SQL*Plus, il n'y a donc pas
de « ; » finale.
Notez que j'entoure la valeur de ma variable par des guillemets. Ceux-ci ne sont
pas nécessaires, sauf si la valeur de la variable contient des espaces. Par habitude,
il est donc préférable de toujours utiliser les guillemets.
Il n'y a pas de « & » lors de la définition d'une variable. Celui-ci n'est à écrire que
pour l'utilisation de la variable.
Dans la liste qui s'affiche, on retrouve bien notre variable matable, accompagnée de
toute une série d'autres variables prédéfinies. Ces variables prédéfinies portent des
noms réservés et sont préfixées d'un « _ ». Par exemple, la variable _USER contient
le nom de l'utilisateur avec lequel vous êtes connecté (ici « HR »).
Le principe est globalement le même pour les variables de lien, si ce n'est qu'elles ne
se gèrent pas avec les mêmes commandes et qu'elles sont faites pour être utilisées
dans des instructions PL/SQL.
Pour afficher une variable de lien dans SQL*Plus (et non un script PL/SQL), on
utilise la commande VARIABLE suivie du nom de la variable.
Au sein des instructions PL/SQL, la variable doit être utilisée en préfixant son nom
de deux points (« : »).
Là encore je ne m'attarde pas plus longtemps sur les variables de lien, nous en
reparlerons plus longuement dans la partie consacrée au PL/SQL.
Ecrire ou copier-coller des requêtes dans un invite de commande n'est pas ce que
l'on fait de plus pratique. SQL*Plus permet donc d'exécuter des requêtes
préalablement écrites dans des fichiers dont l'extension est .sql. On utilise pour cela
les commandesSTART nom_du_fichier.sql ou encore @nom_du_fichier.sql. Les deux
méthodes sont équivalentes.
Le contenu du script est alors joué. S'il contient une requête, vous obtiendrez le
résultat de cette dernière. S'il en contient plusieurs, vous obtiendrez les différents
résultats successivement.
Attention, vous devez indiquer avec précision le chemin vers le script à exécuter.
Vous pouvez utiliser pour cela un chemin absolu ou un chemin relatif.
Le chemin absolu est le chemin complet, depuis la racine du disque dur vers le nom
du fichier. Par exemple, si vous souhaitez lancer le fichier test.sql se trouvant dans
le répertoire C:\Users\Matthieu\, vous devez taper la commande suivante :
1 SQL>@C:\Users\Matthieu\test.sql
Le chemin relatif est le chemin partant du répertoire dans lequel vous vous
trouviez au moment où vous avez lancé le programme sqlplus. Si votre script se
trouve dans ce répertoire, vous pouvez simplement vous contenter de la commande
suivante :
1 SQL>@test.sql
Notez également que vous pouvez omettre l'extension .sql lors de l'appel du fichier.
Vous pouvez par exemple reprendre notre requête de tout à l'heure (SELECT *
FROM &ma_table;), la placer dans un fichier mon_script.sql et exécuter ce dernier
avec SQL*Plus.
D'accord, mais si la variable &ma_table n'a pas été définie, que va-t-il se passer ?
Eh bien si SQL*Plus trouve une variable non définie dans le script, pragmatique
comme il est, il vous demandera sa valeur :
Le buffer
Le buffer est une zone mémoire contenant la dernière commande SQL (ou PL/SQL)
envoyée. Grâce à lui, il va être possible de retravailler la dernière requête envoyée
ou encore de la sauvegarder.
Utilisation du buffer
SQL*Plus vous affiche alors le résultat de cette requête comme nous l'avons vu
précédemment. Tapez à présent la commande LIST (ou simplement L) pour obtenir
le contenu du buffer :
Pour rejouer le contenu du buffer, on utilise la commande RUN (ou plus court, /).
Essayez, vous verrez.
L'une des fonctionnalités les plus intéressantes du buffer est sans doute la
possibilité de modifier une partie de son contenu. On peut ainsi modifier la requête
enregistrée sans avoir à la retaper entièrement. On utilise pour cela la
commande CHANGE (abrégée en C), dont la syntaxe est la suivante :
1 C[HANGE]/texte_a_remplacer/[texte_de_remplacement]
Reprenons par exemple notre buffer où nous l'avions laissé, avec sa requête sur
plusieurs lignes. Tapez alors la commande suivante :
Il ne vousreste alors plus qu'à jouer du / pour lancer votre requête retravaillée. Ici
le gain est minime car la requête est courte, mais imaginez le temps gagné avec des
requêtes plus complexes.
Cette fois, j'ai mis certains mots entre accolades, en les séparant par des barres
verticales. Ces barres signifient « ou ». Autrement dit, une seule de ces options est
attendue. Là encore, cette notation sera vraie dans tout le tutoriel.
Notez que dans le cas présent les valeurs entre accolades sont également entre
crochets, elles sont donc optionnelles.
Le nom du fichier est bien sûr le nom du fichier qui recevra le contenu du buffer.
Vous n'êtes pas obligé de spécifier d'extension, auquel cas SQL*Plus ajoutera lui-
même « .sql ».
L'option CREATE n'est pas nécessaire si le fichier n'existe pas déjà : il sera créé
d'office. En revanche s'il existe, il vous faudra utiliser l'option REPLACE. Enfin
l'option APPEND sert à ajouter le contenu du buffer à la suite d'un fichier déjà
existant (pratique pour conserver quelques requêtes choisies au cours de votre
travail).
La sauvegarde de buffer est très utile car elle permet de créer facilement des scripts
comme on en a vu précédemment.
Contenu du script.sql
Peut-être l'avez-vous remarqué si vous avez essayé de lancer quelques requêtes avec
SQL*Plus : l'affichage n'est pas ce que l'on fait de plus agréable. Alors bien sûr, en
lignes de commandes, il ne faut pas s'attendre à une ergonomie parfaite… Mais tout
de même, quand on voit un retour tel que celui de la figure suivante, on se dit qu'on
peut améliorer les choses !
Oracle est l'un des SGBD les plus performants du marché, on le sait. Cela dit, si
des requêtes complexes lui sont envoyées, il peut tout de même mettre un petit
bout de temps avant de renvoyer un résultat. Connaître le temps d'exécution d'une
requête peut donc être très intéressant et même très utile dans le cadre
d'optimisations.
On utilise alors la commande SET TIMING [ON | OFF] pour afficher ou masquer le
temps
La commande SET TIME [ON | OFF] permet d'ajouter l'heure avant l'invite de
commandes SQL> :
Afficher l'heure peut être utile, mais il est possible d'aller plus loin dans la
modification de l'invite de commandes.
Par défaut, l'invite de commande est paramétré pour afficher SQL>, comme on l'a
vu ci-dessus. La commandeSET SQLPROMPT "texte" permet de placer le texte voulu
à la place (texte à placer entre guillemets dans la commande). Par exemple :
Il est conseillé, comme je l'ai fait ci-dessus, de positionner un caractère bien visible
en fin de prompt (le chevron « > ») ainsi qu'un espace, afin que les requêtes ne «
collent » pas à l'invite de commandes.
Malheureusement, tous les paramètres d'affichage que nous venons de voir sont
oubliés lors de la déconnexion de SQL*Plus. Cela signifie qu'en l'état, vous devez
tout redéfinir à chaque nouvelle connexion… Tout cela est fastidieux, je vous
l'accorde. Ça l'est d'autant plus si vous utilisez quotidiennement SQL*Plus sur la
même base de données et qu'à chaque lancement de SQL*Plus vous devez redéfinir
les mêmes paramétrages.
Pour que nos paramétrages soient pris en compte à chaque nouvelle session, on les
enregistre alors dans le
fichier<ORACLE_HOME>/sqlplus/admin/glogin.sql (<ORACLE_HOME>
représentant le chemin vers le répertoire « Oracle Home »).
Ce fichier est ni plus ni moins qu'un script joué à la connexion. C'est en quelque
sorte l'équivalent du .bashrc ou du .profile que les linuxiens connaissent peut-être.
Selon votre installation, il contient peut-être déjà des commandes. Si tel est le cas,
je vous invite à essayer de comprendre à quoi ces dernières peuvent bien servir.
Ajoutez simplement vos propres commandes à la fin de ce fichier.
SQL*Plus permet d'enregistrer les retours d'une requête ou d'un script directement
dans un fichier. Principal avantage : il n'y a plus besoin de copier-coller le résultat
de la requête à la main dans un fichier, avant de l'envoyer au patron qui le
demandait pour hier. Couplé aux possibilités d'affichages vues dans la sous-partie
précédente, on génère des fichiers quasi-exploitables en l'état.
Écrire dans un fichier avec SQL*Plus, c'est comme filmer avec une caméra :
l'enregistrement commence lorsqu'on appuie sur un bouton et il se poursuit jusqu'à
ce qu'on le coupe. Ici, le bouton est la commande SPOOL (ou SPO) :
monfichierresultat
Le fichier sera placé dans le répertoire courant, c'est-à-dire où vous vous trouviez
lors du lancement de SQL*Plus. Le principe est le même qu'avec les scripts vus plus
tôt.
Attention à ne pas confondre le spool avec la commande SAVE, qui pour mémoire
servait à enregistrer le contenu du buffer dans un fichier. Voici un petit schéma
récapitulatif des entrées et sorties de fichiers avec SQL*Plus :
Avec tout cela, vous devriez pouvoir vous débrouiller sans trop de soucis avec
SQL*Plus
L'outil SQLDevelopper
Si vous voulez utiliser la version « bundle » (comprenant Java et uniquement
disponible pour Win32), il vous suffit de décompresser l’archive téléchargée pour
pouvoir directement utiliser le produit. Il n’y a pas d’installation à prévoir. Il
convient donc de décompresser celle-ci à son emplacement définitif.
Pour le moment, aucune connexion n’y est encore configurée. Nous allons en créer
une.
Pour ajouter une connexion vers une base de données, choisissez l’icône « + » qui
apparait à gauche :
L’écran qui apparait vous demande plusieurs informations que l’on peut séparer en
deux parties : l’utilisateur que vous voulez connecter et les coordonnées de la base
de données que vous souhaitez accéder.
Le nom de la connexion que vous préciserez importe peu. C’est un nom qui
apparaitra par la suite dans la fenetre de connexion et vous permettra – si vous
avez enregistré celle-ci – de pouvoir vous reconnecter rapidement sans devoir
réintroduire toutes les informations. Il vous est conseillé de faire apparaitre le nom
du serveur et le nom du compte avec lequel vous vous connectez.
Pour vos connecter sur votre propre base de donnée en local, les informations sont
les suivantes :
Vous pouvez alors tester votre connexion, éventuellement l’enregistrer pour pouvoir
la réutiliser ultérieurement,
puis vous connecter.
Toutes les connexions que vous créez apparaissent ensuite dans le panneau de
gauche
En rouge : les connexions établies vers des comptes sur les serveurs de base de
données et les objets crées sur ces
En bleu : les fenêtres d’interrogations et les détails sur les objets crées dans un
schéma.
comme en ADA, on définit la notion de bloc, qui contient une partie déclarative puis
un corps qui contient éventuellement un traitement d'exception:
declare
...
begin
...
exception
...
end ;
Structure de contrôle
les structures de contrôle sont celles du langage ADA:
Instructions conditionnelles
if condition then instr
{elsif condition then instr}
[else instr]
end if ;
case variable
{when expression then instr}
[else instr]
end case;
Les boucles:
fori in [reverse] deb .. fin loop
instr
end loop;
while condition loop
instr
end loop;
loop
instr
exit when condition;
instr
endloop;
Les variables
Variables scalaires
La déclaration d’une variable scalaire est de la forme suivante :
Affectations
Il existe plusieurs possibilités pour affecter une valeur à une variable :
Variables %TYPE
La directive %TYPE déclare une variable selon la définition d’une colonne d’une
table ou d’une vue existante. Elle permet aussi de déclarer une variable
conformément à une autre variable précédemment déclarée.
Il faut faire préfixer la directive %TYPE avec le nom de la table et celui de la colonne
(identificateur nomTable.nomColonne%TYPE) ou avec le nom d’une variable
existante (identificateur2 identificateur%TYPE).
Le tableau suivant décrit cette syntaxe :
Variables %ROWTYPE
La directive %ROWTYPE permet de travailler au niveau d’un enregistrement
(record). Ce dernier est composé d’un ensemble de colonnes. L’enregistrement peut
contenir toutes les colonnes d’une table ou seulement certaines.
cette directive est très utilie du point de vue de la maintenance des applicatifs.
Utilisés à bon escient, elle diminue les changements à apporter au code en cas de
modification des types des colonnes de la table. Il est aussi possible d’inserer dans
une table ou de modifier une table en utilisant une variable de type %ROWTYPE.
Nous détaillerons plus tard le mécanisme des curseurs qui emploient beaucoup
cette directive. Le tableau suivant décrit ces cas d’utilisation :
STRUCTURES DE CONTROLE
En tant que langage procédural, PL/SQL offre la possibilité de programmer :
les structures conditionnelles si et cas (IF…et CASE) ;
les structures répétitives tant que, répéter et pour (WHILE, LOOP, FOR).
Structures conditionnelles
SELECT ...INTO
syntaxiquement, c'est une requête SQL qui peut utiliser des variables du
programme, la clause INTO permet de préciser les noms des variables qui vont
recevoir le résultat de la requête. la requêtte ne doit donc renvoyer qu'une seule
ligne
Select liste into listeVariables
from ...
Exemple:
select emp_name, emp_firstname
into le_nom, le_prenom
from Employee
where emp_no = 346;
oubien :
select *
into emp_rec -- emp_rec de type Employee%rowtype
from Employee
whereemp_no = 346;
Un curseur est une structure de données séquentielle avec une position courante.
on utilise un curseur pour parcourir le résultat d'une requêtte SQL dans un
programme PL/SQL.
on déclare un curseur en associant le nom d'une requêtte.
CURSOR nom_curseur(p1, ..., pn) IS une_requ�te ;
cursor emp_cursor(dnum NUMBER) is
select salary, comm
from Employee
where deptno = dnum ;
Si c est un curseur, la ligne courante est de type c%rowtype, c'est à dire du type de
la ligne de la requêtte associée c.
Manipulation d'un curseur
Instructions :
Attributs du curseur:
proj_rec c_proj%rowtype ;
begin
open c_proj ;
loop -- parcours des lignes du curseur
fetch c_proj into proj_rec ;
exit when c_proj%notfound ;
... on utilise la ligne courante rangée dans proj_rec ...
end loop ;
close c_proj ;
end ;
begin
for proj_rec in c_proj loop -- parcours des lignes du curseur
... on utilise la ligne courante rangée dans proj_rec ...
end loop ;
end ;
Les curseurs sont des zones tampon utilisées pour tout select multiligne. A chaque
ordre SELECT, on associe un curseur nommé et on y fait réference dans la suite du
programme pour traiter les lignes les unes après les autres jusqu'à la fin de la table.
chaque accès à un curseur incrémente un pointeur dans l'ensemble des lignes
résultats (resultset).
On peut utiliser des types de variables prédéfinis et des attributs de curseurs
prédéfinis pour faciliter le codage:
Types prédéfinis des variables utiles:
type
Signification Exemple
prédéfini
DECLARE ligne
le type
fournisseur%ROWTYPE
%ROWTYPE enregistrement
(fournisseur est un nom de
d'une table
table...)
DECLARE
v_nomnom_fournisseur%TYPE
le type d'une
%TYPE (nom_fournisseur est une
colonne
colonne de la table
fournisseur...)
Exemple:
Nous allons avoir dans cette partie du cours comment créer et configurer un
utilisateur de base de données ou un compte avec lequel vous pourrez vous
connecter et effectuer des actions sur la base de données en fonctions des droits qui
vous seront alloués. Contrairement à d'autres bases de données, quand vous créez
un utilisateur sur une base Oracle, celui - ci ne dispose d'aucun droit.
Voici les différentes étapes qui seront nécessaire à la création d'un utilisateur
Oracle :
Un schéma est une collection (ou un ensemble) nommé d'objets tels que des tables,
vues, clusters, procédure et packages associés à un utilisateur précis.
Pour créer un utilisateur authentifié par la base de données, vous devrez utiliser la
clause IDENTIFIED BY PASSWORD.
une fois les tablespaces identifiés, l'étape suivante va consister à définir l'espace
alloué à l'utilisateur sur chacun des tablespaces. voici les differentes options
disponibles pour les quotas:
par défaut, le nouvel utilisateur dispose d'un quota null sur tous les tablespaces.
voici un exemple d'assignation de quotas sur differents TABLESPACES:
...
QUOTA 5M ON TBS_USERS QUOTA UNLIMITED ON TMP_USERS...
...
Vous devrez définir ces deux tablespaces avec les options DEFAULT TABLESPACE
pour le tablespace de données et TEMPORARY TABLESPACE pour le tablespace
temporaire.
...
DEFAULT TABLESPACE tbs_user TEMPORARYTABLESPACE tmp_user
...
L'utilisateur helyos aura donc le mot de passe mypass1. Son TABLESPACE par
défaut sera tbs_users avec un quota de 10Mo, son tablespace temporaire sera le
TABLESPACE tmp_users avec un quota de 5M. Il aura aussi la possibilité d'utiliser
le TABLESPACE tools avec un quota de 5Mo.
Il devra changer son mot de passe lors de la connexion et se verra attribuer le profil
app_user.
ALTERUSER < login de l'utilisateur > IDENTIFIED BY < nouveau mot de passe >
Exemple;
Pour modifier le TABLESPACE par défaut d'un utilisateur, la syntaxe à utiliser n'est
pas differente de la syntaxe de création. Cette commande vous permettra de
modifier les TABLESPACES par défaut de l'utilisateur. Cela ne déplacera pas les
objets des anciens TABLESPACES.
Exemple:
Pour des raisons de sécurité, il peut parfois être utile de vérouiller le compte d'un
utilisateur pour éviter que celui-ci soit utilisé de manière frauduleuse. Cette
méthode peut aussi être utilisée pour organiser des objets dans un schéma sans
que l'on puisse utiliser l'utilisateur en question.
-- Verrouillage du compte
ALTER USER scott ACCOUNT LOCK;
-- Activation du compte
ALTER USER scott ACCOUNT UNLOCK;
Par exemple :
Cette méthode est la méthode par défaut. Il faut juste vérifier que le schéma de
l'utilisateur soit vide lors de l'exécution de cette commande. Sinon il en résultera
l'erreur suivante :
Sélectionnez
Cette erreur est due au fait que Oracle ne supprimera pas les objets à l'intérieur du
schéma de l'utilisateur et qu'il vous faudra utiliser l'option CASCADE du chapitre
suivant.
SQL>DROPUSER test;
Utilisateur supprimé.
Lorsque vous souhaitez supprimer un utilisateur et tous les objets de son schéma,
vous devez alors utiliser l'option CASCADE
LES PRIVILEGES
Les privilèges objets sont relatifs aux données de la base et aux actions sur les
objets (tables, vues, …). L’attribution de ces privilèges se fait toujours par
l’instruction GRANT.
Définitions :
L’entrepôt de données est le lieu de stockage centralisé d'un extrait des
bases de production.Cet extrait concerne les données pertinentes pour le
support à la décision. Elles sont intégréeset historisées. L’organisation des
données est faite selon un modèle qui facilite la gestionefficace des données
et leur historisation.
Le magasin de données
La modélisation multidimensionnelle
La modélisation conceptuelle
Concept de fait
Définition :
Concept de dimension
Définition :
Définition :
Une hiérarchie organise les paramètres d'une dimension selon une relation
"est_plus_fin"conformément à leur niveau de détail.
Ainsi chaque ville appartient à un département qui est situé dans une
région.
Modélisation logique
ROLAP et OOLAP
Le cube OLAP
Les analyses réalisées par les fonctions OLAP sont utilisées pour évaluer
l’entreprise. Vient donc la notion de KPI. Les KPI (Key Performance
Indicator) sont, comme leur nom l’indique, des indicateurs clés de
performance qui montrent l’évolution de l’entreprise en matière de qualité et
les objectifs à atteindre. Un KPI indique une valeur ou une couleur (échelle
prédéfinie) la tendance d’une mesure vis-à-vis des objectifs requis.
Dans notre exemple, nous allons nous intéresser aux ventes de tous les
magasins "XXX".
Voyons maintenant comment peut-on utiliser ce cube. Pour cela, nous allons
nous intéresser aux différentes vues de ce cube.
FIN DU COURS
Bertin LOBO MINGA
[email protected]
0970053065 / 081 1959141