Vous êtes sur la page 1sur 39

Djamel Berrabah

Les schémas

• Tous les objets d’une base Oracle sont créés par


un utilisateur identifié.

• Ces objets appartiennent donc au schéma de cet


utilisateur qui est désigné comme leur propriétaire.

• Le schéma porte le nom de l’utilisateur, il n’a pas


à être crée ni géré.

• Il permet de désigner de manière unique tout


objet dans la base par l’identifiant de l’objet
précédé du nom du schéma.
2010 / 2011 D. Berrabah 2
Les schémas

• L’outil OEM (Oracle Entreprise Manager) permet de gérer


les objets de la BD

2010 / 2011 D. Berrabah 3


Les tables
• Une table est une structure contenant des données dans une base
de données relationnelle.
• Elle correspond à une entité du MCD (Exemple Client) ou une entité
associative (Table de ligne de commandes ).
• Pour créer une table, les principes suivants sont à respecter :
– Utiliser des noms clairs pour nommer les tables, les colonnes et les
contraintes
– Faire attention à la cohérence des abréviation ainsi qu’à la forme (pluriel
ou singulier ) utilisée pour nommer les tables, les colonnes et les
contraintes
– Commenter chaque table et colonne à l’aide de la commande
COMMENT (syntaxe détaillée ultérieurement)
– Normaliser chaque table
– Choisir le type de données correct pour chaque colonne de la table
– Définir les colonnes pouvant être nulles en fin de la table de façon à
économiser le maximum d’espace au niveau du stockage des données.

2010 / 2011 D. Berrabah 4


Les tables

Type Description
Char(n) Un type chaîne de caractères à longueur fixe (n
caractères).
Varchar2(n) Un type chaîne de caractères à longueur variable mais
ne dépassant pas n caractères.
Number(n,d) Un type numérique à n chiffres et à d décimales
Date Un type permettant de représenter des dates.
Attention la syntaxe diffère selon le pays ('jj/mm/aa' ou
'jj-mmm-aa').
TIMESTAMP(p) Type date avec l’heure (année, mois, jour, heure,
minute, seconde) avec la précision p, le nombre de
chiffres significatifs pour les fractions de secondes (6
par défaut)
Long Un type texte de taille maximum 2 Go.
Raw Un type binaire (256 octets maximum).
Les tables

Type Description
Long raw Un type binaire mais jusqu'à 2 Go.
ROWID Chaîne hexadécimale représentant l'adresse unique
d'une ligne de la table. Cette valeur est stockée dans
la pseudo-colonne de même nom.
BLOB Binary Long Object : données binaires non
structurées (4 GO max.)
CLOB/NCLOB Chaîne de caractères de longueur variable (4 GO
max.)
BFILE Données binaire non structurée stockées dans un
fichier du système d’exploitation, jusqu’à 4 Go. La
colonne stocke un pointeur vers le fichier qui est en
lecture seule et n’est pas géré par les transaction.

2010 / 2011 D. Berrabah 6


Création des tables

• Création des tables


create table [schema.]nom_table (
[nom_colonne type_donnees [default exp] [constraint exp ],
[nom_colonne type_donnees [default exp] [constraint exp ], ….]
[table_constraint]
)
[ logging/nologging]
[parallel parallel clause ]
[cache/nocache]
[as query ]
;

Privilèges :
- Create table : Création de table dans son propre schéma qui nécessite aussi un
quotas (unlimited) sur un tablespace.

- Create any table : création d’une table dans n’importe quel schéma.

2010 / 2011 D. Berrabah 7


Modification des tables
• Modification d’une table

– Ajouter ou supprimer une ou plusieurs colonnes à une table

– Modifier la définition d’une colonne existantes (type de données,


longueur, valeur par défaut ….)

– Ajouter, supprimer, activer ou désactiver des contraintes d’intégrité


associés à la table

– Ajouter, supprimer, activer ou désactiver des triggers associés à la


table

– Modifier les paramètres de stockage

2010 / 2011 D. Berrabah 8


Modification des tables
Modification d’une table

Alter table [schema.]nom_tabl


ADD [nom_colonne type_donnée [default exp][Constraint expr], ..]
MODIFY [colonne,…]
ADD CONSTRAINT nom_contrainte
{primary key/unique key} nom_colonne
/foreign key nom_colonne references nom_table_parent
/chek condition }
drop constraint nom_contrainte
{anable/desable} constraint nom_contrainte
{anable/desable} all triggers
parallel parallel_clause
Cache / nocache
deallocation unused [keep integer] ;

2010 / 2011 D. Berrabah 9


Privilèges ou droits sur les tables

• Privilèges ou droits
Alter table : modification d’une table dans son propre schéma
Alter any table : modification d’une table dans n’importe quel schéma.
Suppression
drop table [schema.]nom_table
[cascade constraint ] ;
Privilèges : drop any table
• Troncature
truncate table [schema.]nom_table [drop/reuse storage]

- Drop Storage : L’espace correspondant aux lignes supprimées est


libéré au sein de la table et la taille de la table ramenée à sa taille
initiale.
- Reuse Storage : l’espace correspondant aux lignes supprimées reste
réservé à la table.

2010 / 2011 D. Berrabah 10


Les contraintes

• Les contraintes ne sont pas des objets indépendants.


• Elles sont créées par rapport à une table.
• Ce sont des objets qui traduisent des règles
d’intégrité fonctionnelles.
• A ce titre, ces objets sont en général demandés par
les développeurs.
• Elles sont créées à la création de la table ou plus tard
avec la commande ALTER TABLE.

2010 / 2011 D. Berrabah 11


Les types de contraintes

– primary key : Clé primaire ; contrainte de relation, unicité des


rangées dans une table

– unique key : Clé unique ; contrainte de relation ; unicité des


valeurs d’une colonne (ou d’une combinaison) dans une table.

– foreign key : Clé étrangère ; contrainte d’intégrité référentielle ; les


valeurs d’une colonne d’une table (enfant) doivent exister dans une
colonne d’une autre table (parent).

– NOT NULL : colonne obligatoire ; toute rangée de la table doit


avoir une valeur pour cette colonne.

– CHECK : contrainte d’intégrité de domaine ou de gestion, pouvant


faire intervenir une ou plusieurs d’une rangée de la table et des
constantes.

2010 / 2011 D. Berrabah 12


Les tables imbriquées
o Tables imbriquées : nested tables
o Une table imbriquée est une table contenue à
l’intérieur d’une colonne d’une autre table.
o La table imbriquée est stockée à l’extérieur des
rangées de la table parent (out of line).
o La rangée contient uniquement un identifiant.
o Ce n’est pas un objet (purement) relationnel !

Vues du dictionnaire
user_tables, all_tables, dba_tables
user_tab_columns [all, dba]
user_constraints [dba]
2010 / 2011 D. Berrabah 13
Les index
o Les index permettent un accès rapide aux informations d’une tables dans le
cas où seule une quantité modeste d’information est sélectionnée.
o D’autre part, les index de type UNIQUE permettent de contrôler l’unicité des
valeurs d’une ou plusieurs colonnes dans une table.
o Le nombre d’index sur une table n’est pas limité.
o Lors que l’on crée un index sur une table comportant des données, Oracle
utilise un espace en mémoire sort_area pour réaliser le tri des données.

o Quand créer un index ?


o Si les requêtes effectuées sur la table portent sur au moins 20 % des
données.
o Si les colonnes sont utilisées dans des jointures, créer un index peut
sensiblement améliorer les performances.
o Les tables ayant un faible volume de données ne doivent pas être indexées.

2010 / 2011 D. Berrabah 14


Les index
o Quelles colonnes indexer ?
o Les colonnes dont les valeurs sont uniques ou très
dispersées.
o Les colonnes pouvant contenir des valeurs nulles, mais à
condition que les requêtes portent souvent sur des valeurs
renseignées.
o Il faut par contre éviter d’indexer :
o Les colonnes comportant peu de valeurs distinctes (ou alors
avec un index bitmap, voir ci-dessous).
o Les colonnes comportant de nombreuses valeurs nulles et
pour lesquelles on réalise peu de sélections sur les valeurs
non nulles.
o Les colonnes de type LONG et LONG ROW ne peuvent être
indexées.

2010 / 2011 D. Berrabah 15


Les types d’index

Oracle fournit deux types d’index : les B-tree et les bitmap.

Le but d’index est de fournir un pointeur sur les rangées de la table


contenant une certaine valeur.

Dans un index standard, ceci est réalisé en stockant une liste de


ROWID avec chaque valeur correspondant aux rangées contenant
cette valeur.

Dans un index bitmap, il y a un bitmap pour chaque valeur. Dans


chaque bitmap, un bit correspond à un ROWID.

Pour des colonnes avec peu de valeurs différentes, les index bitmap
sont particulièrement adaptés.

Les index bitmap sont intéressants pour les application type data
warehouse plutôt que pour le OLTP, car conçu pour des
interrogations plutôt que pour les mises à jour.

2010 / 2011 D. Berrabah 16


Création des index

Create index [unique/bitmap] index nom_index ON nom_table


(colonne [,…]
nosort
[parallel parallel_clause]
[logging/nologging]
storage clause

• L’un des privilèges (droits) CREATE INDEX ou CREATE ANY INDEX


est nécessaire.

• La création d’une contrainte de clé primaire ou unique crée


automatiquement un index unique.

2010 / 2011 D. Berrabah 17


Les index

Suppression
Lorsque l’on supprime un index, l’espace occupé dans la base de
données par les extensions de l’index est libéré.

DROP INDEX nom_index

Il faut avoir le privilège DROP ANY INDEX.


Pour réorganiser l’index, on peut le faire à l’aide de la commande

ALTER INDEX nom_index REBUILD.

Les vues du dictionnaire pour la gestion des index


user_indexes [all, dba]
user_ind_columns [all, dba]
2010 / 2011 D. Berrabah 18
Les tables index- organized (IOT)

o Une table organisée par index (IOT) diffère d’une


table standard car ses données sont stockées dans
un index.
o Les modifications sur les données de la table
résultent donc en mises à jour de l’index.
o Plutôt que d’avoir deux espaces distincts pour index
et données, tout est stocké dans la structure B-tree, le
ROWID étant remplacé par les données réelles.
o Les IOT sont donc adaptées à des données accédées
par la clé primaire ou toute clé préfixe de la clé
primaire.

2010 / 2011 D. Berrabah 19


Les tables index- organized (IOT)

• Les IOT peuvent être particulièrement


performantes dans certains types
d’applications :
– Recherche documentaire
– Applications spatiales
– OLAP (On Line Analysis processing )

La manipulation des IOT est transparente pour


les instructions SQL. Seule la création
nécessite une clause particulière pour préciser
le type d’organisation et la clé primaire.
2010 / 2011 D. Berrabah 20
Les vues
o Une vue est une image logique des données stockées dans une table
ou bien dans un ensemble de tables.
o Une vue se comporte comme une table dans la mesure où il est
possible
o d’interroger,
o de créer,
o modifier
o ou supprimer des lignes dans la vue.

o Création
o create [or replace] [force/noforce] view
o [schema.]nom_vue
o [(alias[,alias]…)]
o AS interrogation
o [WITH {check option [constraint contraint ]
o /READ ONLY}] ;
2010 / 2011 D. Berrabah 21
Les vues

o Replace : Recrée la vue si elle existe déjà. Tous les objets et


procédures PL/SQL référençant la vue ont leur statut positionné à
INVALID
o Alias : Nom des colonnes dans la vue
o Interrogation : Requête sur laquelle est basée la vue
o Force/NoForce : L’option FORCE de créer une vue même si elle
est basée sur une requête comportant des erreurs (table inexistante,
nom de colonne invalide, privilèges insuffisants sur les objets …).
Le statut de la vue est alors positionné à INVALID.
o With check Option : Interdit la création ou la modification de lignes
qui ne pourraient être elles-mêmes sélectionnées au travers de la
vue.
o With Read Only : Seule la sélection de données est autorisée au
travers de la vue. La suppression, l’insertion ou la mise à jour des
lignes au travers de la vue sont interdites.
2010 / 2011 D. Berrabah 22
Les vues

L’utilisation des vues


• Les interrogation sur les vues sont réalisées de la même
manière que les interrogations sur les tables.
• Si la vue est basée sur une requête contenant une jointure,
l’opérateur DISTINCT, une clause GROUP BY ou une fonction
de groupe, il est impossible de réaliser des mises à jour au
travers de la vue.
• Privilèges
Create View : création d’une vue dans son propre schéma
Create Any View : Création d’une vue dans n’importe quel
schéma
• Suppression
drop view [schema.]nom_vue
Il faut le privilèges DROP ANY VIEW ou être propriétaire.
• Les vues du dictionnaire
user_views [all, dba]
dba_dependencies
2010 / 2011 D. Berrabah 23
Les séquences

• Les séquences permettent la création de clés primaires


séquentielles automatiques tout en améliorant des accès
concurrents.

• Oracle n’attends pas qu’une transaction ayant mis à jour une


séquence soit achevée (par un commit ou un roll back ) pour libérer
la ressource.

• Création
create sequence nom_séquence
[increment by valeur1]
[start with valeur2]
[maxvalue valeur3/nomaxvalue]
[minvalue valeur4/nominvalue]
[cycle/nocycle]
[cache valeur5/nocache] ;
2010 / 2011 D. Berrabah 24
Les séquences

Privilèges
Create Sequence : Création d’une séquence dans son propre schéma
Create Any Sequence : Création d’une séquence dans n’importe quel
schéma

Utilisation d’une séquence


Valeur suivante : nom_séquences.nextval
Valeur courante : nom_séquence.currval. Cette valeur ne peut être
obtenue qu’après un NEXTVAL dans la session en cours.

Une séquence peut être utilisée dans


- La clause VALUES d’un INSERT
- Dans un SELECT
- Dans la clause SET d’un UPDATE

Dans une même instruction Insert ou Update, plusieurs appels à NEXTVAL


retournent la même valeur.

2010 / 2011 D. Berrabah 25


Les séquences

Paramètre init.ora

Sequence_cache_entries. Positionnée à 10 par défaut, cette valeur doit être


augmentée dés que l’on utilise des séquence.

• Modification

alter sequence nom_séquence


[increment by valeur1]
[maxvalue valeur3/nomaxvalue]
[minvalue valeur4/nominvalue]
[cycle/nocycle]
[cache valeur5/nocache] ;
Le privilège ALTER ANY SEQUENCE est nécessaire.
drop sequence nom_séquence
Le privilège DROP ANY SEQUENCE est nécessaire.

Les vues du dictionnaire : user_sequences [dba]

2010 / 2011 D. Berrabah 26


Les synonymes
o Un synonyme est un alias pour une table, une vue, une séquence ou
encore un morceau de code stocké dans la base.
o Un synonyme n’est pas un objet, mais il fait directement référence à
ceux-ci.
o Un synonyme permet de :
o Substituer un nom à celui d’un objet (schema.nom_obj)
o Donner un accès de type public à un objet
o Faire abstraction de l’implantation physique des objets en cas de base
de données distribuée
o Simplifier l’écriture des ordres SQL
o Un synonyme peut être public ou privé. Un utilisateur créera un
synonyme privé pour son seul usage alors qu’un administrateur
créera un synonyme public commun pour l’ensemble des utilisateurs
exploitant la base de données.

2010 / 2011 D. Berrabah 27


Les synonymes

Création – Suppression
create [public] synonym [schema.]nom_synonyme
FOR [SCHEMA.]nom_objet@dblink] ;
• Il n’est pas possible de créer un synonyme pour une procédure ou une
fonction contenue dans un package.
• Il est possible d’utiliser un synonyme pour référencer un objet dans une
base distante. Si l’option dblink n’est pas précisée, Oracle suppose
que l’objet est présent dans la base locale.

drop synonym nom_synonyme ;

Privilèges nécessaires : Create [Any] Synonym , Drop Any Synonym.

Les vues du dictionnaire : user_synonyms [dba]

2010 / 2011 D. Berrabah 28


Les snapshots - clichés

• Un snapshot est une copie d’une table ou de données provenant de


plusieurs tables. Un snapshot n’est accessible qu’en lecture et est
rafraîchi périodiquement pour refléter l’évolution des données.
• Le rafraîchissements automatique utilise la procédure
DBMS_SNAPSHOT.REFRESH_ALL( )
• Création
create snapshot [Schema.]snapshot
[[PCTFREE integer] [PCTUSED integer]
[INITRANS integer] [MAXTRANS integer]
[LOGGING/NOLOGGING] [STORAGE storage_clause]
[USING INDEX [PCTFREE integer … /TABLESPACE
tablespace]
[REFRESH [FAST/COMPLETE/FORCE]
START WITH date/NEXT date] ]
AS query
Les vues du dictionnaire : user_snapshots [dba]

2010 / 2011 D. Berrabah 29


Les morceaux de code

Une base Oracle peut stocker des morceaux de


code écrits en PL/SQL sous forme de code
source et de code compilé. Les objets peuvent
être de type :
Procédure, Fonction, Package, Trigger .

• Les vues du dictionnaire


user_triggers [dba]
user_source[dba]
2010 / 2011 D. Berrabah 30
Les commentaires

Ces commandes permettent de documenter les


objets de types table, vue, snapshot ainsi que
colonne.

COMMENT ON TABLE nom_objet IS ‘texte’ ;


COMMENT ON COLUMN non_object.nom_col IS ‘texte’ ;

Privilège nécessaire :
COMMENT ANY TABLE

2010 / 2011 D. Berrabah 31


Les clusters

• Les clusters sont des structures de stockage permettant de stocker au


même endroit physique les données de plusieurs tables. Ceci est
destiné à optimiser l’accès aux données de ces tables qui sont utilisées
ensemble.

• Ce type d’optimisation doit être considéré lorsque toutes les autres


techniques n’ont pas donnée de résultat suffisant.

• En effet, leur mise en œuvre n’est pas dynamique ; il faut créer les
tables au sein du cluster, ce qui interdit leur utilisation pendant la
création.

• Enfin, ces techniques s’appliquent à des tables « statiques » dont les


données ne changent pas car si la lecture est plus performante, au
contraire, les modifications sont pénalisantes.

2010 / 2011 D. Berrabah 32


L’espace de stockage

• Storage clause
le stockage des objets est géré par les paramètres de
clause dite STOREGE CLAUSE.

Elle peut être précisée au moment de la création de l’objet,


ou avec l’instruction
’ ALTER, pour modifier
ultérieurement les paramètres.

Ces paramètres son stockés dans le dictionnaire et peuvent


être consultés par le DBA.

Si aucune clause n’est fournie à la création, l’objet se voit


attribuer les paramètres par défaut en vigueur dans le
tablespace à cet effet instant.
2010 / 2011 D. Berrabah 33
L’espace de stockage

• La clause storage
La liste des paramètres de la clause est la suivante :

PCTFREE int
PCTUSED int
INITRANS int
MAXTRANS int
TABLSPACE nom_tablespace
STORAGE ( INITIAL intK/M
NEXT intK/M PCTINCREASE int
OPTIMAL intK/M MINEXTENTS int
MAXEXTENTS int FREELISTS int )
2010 / 2011 D. Berrabah 34
Analyse des objets
• Vues du dictionnaire
– DBA_DATA_FILES : Fichiers constituant les tablespaces
– DBA_EXTENTS : Extents composant tous les segments de la
base
– DBA_FREE_SPACE : Morceaux (extents) disponibles dans les
fichiers
– DBA_FREE_SPACE_COALESCED : Statistiques sur l’espace
disponible et concaténé dans les tablespace
– DBA_INDEXES : Description de tous les index de la base
– DBA_object_size : Taille des objets PL/SQL
– DBA_ROLLBACK_SEGS : Description de tous les rollback
segments
– DBA_SEGMENTS : Description de tout l’espace alloués aux
segments de la base
– DBA_TABLES : Description de toutes les tables relationnelles de
la base

2010 / 2011 D. Berrabah 35


Analyse des objets
• Statistiques
o Certaines tables (vues) du dictionnaire présentent des
statistiques:
o sur les valeurs et longueurs de colonnes,
o sur le nombre de rangées et de blocs,
o sur les valeurs distinctes d’index,
o sur la longueur des rangées
o Ces vues sont : DBA_indexes, DBA_TAB_COL_STATISTICS,
DBA_TABLES, INDEX_STATS, …)

o Pour valoriser cette information, le DBA doit exécuter la


commande ANALYSE sur les objets pour les quels il souhaite
rassembler des statistiques.
o La durée d’exécution de cette commande peut être importante.
o Ceci peut modifier le comportement de l’optimiseur SQL.
o Les statistiques doivent alors être maintenues à jour ou
détruites.
2010 / 2011 D. Berrabah 36
Analyse des objets

• Statistiques
analyze {index/table}nom_seg
{COMPUTE STATISTICS
/ESTIMATE STATISTICS [SAMPLE N {rows/percent} ]
/DELETE STATISTICS
/LIST CHAINED ROWS
};
Ex : Analyze table emp compute statistics ;

Il est recommandé d’utiliser à la place de la commande


ANALYZE , la procédure Analyze_schema du package
DBMS_UTILITY.

begin
bms_utility.analyze_schema('&OWNER','ESTIMATE',NULL,5);
end;

2010 / 2011 D. Berrabah 37


Réorganisation des objets

• Des objets mal dimensionnés ou ayant une dynamique


non prévue peuvent générer des dégradations de
performances mais surtout, des problèmes
d’administration de l’espace.

• Il est nécessaire de surveiller les objets de la base et de


procéder à une réorganisation du stockage.

• L’outil export/import d’Oracle est particulièrement adapté


à ce besoin. Il peut aussi être utilisé pour les
sauvegardes.

2010 / 2011 D. Berrabah 38


Réorganisation des objets

Export/Import

Cet outil permet de créer un fichier séquentiel dans un format interne à


Oracle, à partir du contenue d’une ou de plusieurs tables de la base.

Ceci permet de les transférer d’une base à une autre, ou de constituer des
clichés, ou jeux de données pour des utilisations répétitives comme la
formation ou défaut.

L’outil export est utilisé à partir du OS, soit sur la ligne de commande, soit
par interface graphique (NT).

Le nom de la commande est fonction du système ? Par exemple :


EXP nom_user/mot_passe
Exp80 nom_user/mot_passe

2010 / 2011 D. Berrabah 39

Vous aimerez peut-être aussi